导图社区 MySQL入门思维导图
这是一篇关于MySQL入门的思维导图,最细节的复习体系知识点梳理图,非常实用,你赶紧get加强记忆。
编辑于2021-06-27 18:18:59MySQL
mysql配置
解压 mysql 的安装包
mkdir mysql tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C mysql/
安装客户端
cd mysql/ rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps
安装服务端
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
修改mysql默认字符集
vi /etc/my.cnf 添加如下内容: [mysqld] character-set-server=utf8 collation-server=utf8_general_ci -- 在文件最下方添加 [client] default-character-set=utf8
启动mysql服务
service mysqld start
登录mysql
mysql -u root -p 敲回车,输入密码 初始密码查看:cat /var/log/mysqld.log 在root@localhost: 后面的就是初始密码
修改mysql登录密码
set global validate_password_policy=0; set global validate_password_length=1; set password=password('密码');
授予远程连接权限
//授权 grant all privileges on *.* to 'root' @'%' identified by '密码'; //刷新 flush privileges;
关闭Linux系统防火墙
systemctl stop firewalld 暂时关闭 systemctl disable firewalld 永久关闭
重启mysql服务
service mysqld restart
mysql入门
数据库介绍
概述
本质就是存储数据库的仓库,就是文件系统,方便管理数据
DBMS(数据库管理系统)
MySQL软件
多个仓库
多张表
多条记录(数据)
实体和表关系
一个实体对应张表
一个对象对应一条记录
常见关系型数据库
MySQL
Oracle
数据库安装和使用
登录
直接登录本机
mysql -u用户名 -p
远程指定ip
mysql -h主机名 -u用户名 -p密码
退出
exit
quit
sql介绍
概述
结构化查询语言,通过sql语句可以实现对数据库的基础操作【CRUD】
create 创建
retrieve 检索
update 更新
delete 删除
方言
sql是一套标准,所有的数据库厂商都实现了这套标准,但各自厂商在这套标准上增加自己的特有语句,这部分就称为方言
例如:mysql注释 #
sql分类
DDL
操作数据库和表
create
alter
drop
DML
操作记录的增删改
insert
update
delete
DQL
操作记录的查询
select
DCL
操作用户的权限
TCL
操作数据的事务安全
sql基础操作
DDL
操作数据库
create database 数据库名;
show databases;
drop database 数据库名;
use 数据库名;
操作表
创建表
create table 表名( 列名 数据类型, 列名 数据类型, ..... );
常用数据类型
int
double
decimal
varchar(1~65535)
date
datetime
查看表
show tables;
desc 表名;
修改表
alter table 表名
add
modify
change
drop
charset
修改表名
rename table 旧表名 to 新表名;
删除表
drop table 表名;
摧毁表,重构表
truncate table 表名;
DML
添加记录
insert into 表名(列名1,列名2...) values(值1,值2...);
字符串可以使用单双引,推荐单引号
字符串可以插入任意类型,底层进行了隐式转换
修改记录
update 表名 set 列名1=值1,列名2=值2 [where 条件]
删除记录
delete from 表名 [where 条件]
DQL
简单查询
select ... from 表名
去重关键字
select distinct 列名 from 表名
ifnull()高级函数
ifnull(列名,默认值) 如果该列有值直接返回,如果为null那么返回默认值
别名
select 列名 [as] 列别名 from 表名 [as] 表别名
条件
select ... from 表名 where 条件
关系运算符
逻辑运算符
and
or
not
in关键字
select ... from 表名 where 列名 in(值1,值2..);
between关键字
select ... from 表名 where 列名 between 较小的值 and 较大的的值
is null关键字
null 六亲不认
is null 为空
is not null 不为空
like关键字
_ 单个任意字符
% 多个任意字符
MySQL查询&约束&多表
dql单表高级查询
排序
select ... from 表名 order by 排序列 [asc | desc]
asc 升序 默认值
desc 降序
聚合函数
count
count(*) ,统计包含null数据
max
min
sum
avg
分组
select 分组 表名 group by 分组 having 分组后条件
where在分组前条件过滤,不能使用聚合函数
having在分组后条件过滤,可以使用聚合函数
分页
select ... from 表名 limit 开始索引,每页显示个数
索引公式:
索引= (当前页-1)× 每页显示个数
数据库约束
对数据进一步限定,保证数据的正确性,有效性和完整性
分类
1)主键
primary key
给每一条记录增加唯一标识,非空且唯一
联合主键
primary key(字段1,字段2)
2)唯一
unique
3)非空
not null
4)默认值
default
5)外键约束
foreign key
创建表时候设置主键约束
create table 表名( id int primary key auto_increment, ... .. );
表关系
一对多
应用场景
班级和学生
部门和员工
实例
一个班级下面有多名学生,多名学生属于同一个班级
建表原则
在从表中添加一个字段(列),字段名(主表名_id)类型与主表的主键一致,这个字段称为外键,通过外键指向主表的主键,建立关联关系
多对多
应用场景
老师和学生
学生和课程
实例
一个学生可以选修多门课程,一门课程可以被多个学生选修
建表原则
多对多其实由二个一对多组成
需要借助于第三张表(中间表),需要有二个外键字段分别指向各自的主键,通常还会作为联合主键
一对一
应用场景
公民和身份证号
公司和注册地
实例
一个公民只能有一个身份证号,一个身份证号只能属于一个公民
建表原则
主键是外键
范式
第一范式
每个字列都是不可分割的
第二范式
分表 (在1NF的基础上,非码属性必须完全依赖于码)
第三范式
分表
mysql多表查询&权限
一 多表查询
笛卡尔积
多表中每一条记录的进行组合,又称为交叉连接
内连接
查询二张表的交集部分
语法
隐式内连接
select ... from 左表,右表 where 连接条件;
显示内连接
select ... from 左表 inner join 右表 on 连接条件; (inner可以省略)
外连接
左外连接
查询左表全部,再去匹配右表,有就显示,没有显示null
语法
select ... from 左表 left outer join 右表 on 连接条件;
右外连接
子查询
子查询结果为单值
子查询结果为单列多行
子查询结果为多列多行
规律
子查询结果只要为单列,肯定在where后作为条件使用
子查询结果只要为多列,一般在from后作为虚拟表使用
二 多表案例
规律
1。确定几张表
2。确定连接条件
on关键字
3。确定显示字段
4。确定业务条件
where关键字
三 DCL用户权限
创建用户
create user '用户名'@'主机名' identifield by '密码'
授予权限
grant 权限1,权限2.... on 数据库.表名 to '用户名'@'主机名'
查看权限
show grants for '用户名'@'主机名'
撤销权限
revoke 权限1,权限2... on 数据库.表名 from '用户名'@'主机名'
删除用户
drop user '用户名'@'主机名'
密码管理
set password for '用户名'@'主机名'=password('新密码');
无验证登录,再修改密码。 mysqld --skip-grant-tables
四 数据库还原与备份
dos命令行
图形化工具
五 作业
MySQL函数&事务
一 MySQL函数
字符串
concat()
拼接
char_length()
字符长度
trim()
去掉前后空格
replace()
替换
substr()
截取
日期
now()、curdate()、curtime()
year()、month()、day()
adddate()、subdate()
datediff()
日期间之间的计算
数学
ceil()、floor()
向上向下取整
rand()
随机数
round()
四舍五入
truncate()
保留指定小数位
高级函数
case表达式
相当于java中swtich
if表达式
相当于java中三元运算符
二 MySQL综合练习
课下必须写二遍
三 事务安全 TCL
什么是事务:
是指的是多个步骤的一组业务操作,要么都成功,要么都失败
操作
手动提交
begin
commit
rollback
自动提交
默认
我们使用JDBC时,手动关闭自动提交事务
临时关闭自动提交
set autocommit=off;
事务原理
临时日志文件
保存点
设置保存点
savepoint 保存点名
回滚保存点
rollback to 保存点名
事务特性
A
原子性
C
一致性
I
隔离性
D
持久性
隔离性会出现问题
脏读
不可重复读
幻读(虚读)
数据库隔离级别
读未提交
读已提交
oracle 和 sqlServer 默认
可重复读
MySQL 默认
串行化
MySQL索引
MySQL性能
数据库类型
查询密集型
修改密集型
查看数据库分类命令
show global status like ''innodb_rows%;
慢查询日志
show variables like '%query%';
插入千万级别记录
我的电脑3分钟左右
MySQL索引
索引=排好序的数据结构
创建索引
create table teacher( id int, name varchar(32), telephone varchar(11), primary key(id), -- 索引名 primary index(name) , -- 索引名 name unique(telephone) -- 索引名 telephone );
索引的创建原则
1)存储内容的可识别度70%
2)经常查询的字段,可以设置索引
3)经常多表连接的字段,可以设置索引
主键(primary key)
外键(index)
4)经常排序的字段,可以设置索引
索引失效问题
1)like使用左模糊查询
2)or拼接
3)索引列计算
4)not in 、 != 、 is not null
索引的数据结构
二叉树
左边子节点比父节点小,右边的子节点比父节点大
红黑树
平衡二叉树
左旋和右旋
BTree
多路平衡搜索树
有效控制树的高度
每一个节点可以设置多个元素
索引
指针
数据
B+Tree
MySQL使用数据结构
非叶子节点只存储索引和指针,叶子节点存储索引和数据(从左到右,从小达到依次排序,底层是一个双向链表)
Hash散列
数据库存储引擎
存储引擎
MyIsam
非聚集索引
特点:不支持事务和外键约束
Innodb
聚集索引
特点:支持事务和外键约束