导图社区 mysql学习思维导图
MySQL学习读书笔记,本思维导图整理了sql、函数、约束、多表查询、事务等基础知识,若对你有帮助可以收藏下载哦。
编辑于2023-02-14 18:40:24 安徽mysql学习思维导图--基础
sql
sql分类
ddl data definition language
定义语言,用来定义数据库、表等字段
dml data manipulation language
操作语言,表中的数据增删改查
dql data query language
数据查询语言select
dcl data control language
数据控制语言:创建数据库用户,以及控制用户访问权限
DDL
数据库操作
查看所有数据库 show databases;
子主题
查询当前数据库 select database();
创建数据库 create database [if not existis] 数据库名 [default charset 字符集] [collate 排序规则]
删除数据库 drop database [if not existis ] 数据库名
使用数据库 use 数据库名
表操作
查看所有表--- show tables;
使用表 ---use 表名
查看表详细结构--- desc 表名
查看建表语句 ---show create table 表名;
创建表结构 ---create table 表名{字段1 类型 [comment 注释] }comment
修改表操作
添加字段 ---alter table 表名 add 字段名 类型(长度)[comment 注释] [约束] ---------ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';
修改数据类型---alter table 表名 modify 字段名 新数据类型 (长度);
修改字段名和字段类型---alter table 表名 change 旧字段名 新字段名 类型(长度 )[comment 注释] [约束];
删除字段 ---alter table 表名 drop 字段名;
删除表---drop table [if exists] 表名;
删除指定的表创建新表---truncate table 表名;
数据类型
数值类型
tinyint 1字节 小数数值
smallint 2字节
mediumint 3字节
int/integer4字节
bigint 8字节 极大值
float 4字节 单精度浮点小数
double 8字节 双精度浮点小数
字符串类型
char 定长字符串
varchar 变长字符串(需要指定初始长度)
tinyblob 不超过255个字符的二进制数据
tinytext短文本字符串
blob二进制长文本数据
text长文本数据
mediumblob 二进制中等长度文本数据
mediumtext 中等长度文本数据
longblob
longtext
日期类型
date 年月日
time 时分秒
year 年
datetime 年月日时分秒
timestamp 年月日时分秒--时间戳
dml
添加数据
给特定字段添加数据---insert into 表名(字段名1,2,3) values(值1,2,3;)
给全部数据添加字段---insert into 表名 values(值1,2,3),(值1,2,3)......;
修改数据---update 表名 set 字段名1=值1,字段名2=值2,...[where 条件];
删除数据--- delete from 表名 [ where 条件];
dql数据查询语言
查询所有字段---select * from 表名;
字段设置别名---select 字段1 [as 别名1],字段2 [as 别名2]... from 表名;
删除表中重复记录---select distinct 字段1,2... from 表名;
条件查询---select 字段列表 from 表名 where 条件列表;
符号
in(...)在in之后的列表中的值,多选一;
like占位符---模糊匹配(_匹配单个字符,%匹配任意个字符)
is null是null
and--or-- not
聚合函数
count--select count (字段/*总记录数) from emp;
max--select max(age) from emp;
min--select min(age) from emp;
sum--select sum(age) from emp;
avg-- select avg(age) from emp;
分组查询
group by--select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件 ];
having是在分组后过滤where是在分前过滤
排序查询
order by--select 字段列表 from 表名 order by 字段1 排序方式1...asc升序(默认)/desc降序;
分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;起始索引=(查询页码-1)*每页显示记录数 查询第2页员工数据, 每页展示10条记录 select * from emp limit 10,10;
查询语句的执行顺序
原始顺序select *from 表名where 条件列表 group by 分组字段列表 having分组后的条件列表 order by 排序字段列表 limit 分页参数; 执行循序 from 表名 where 条件列表 group by 分组字段列表 having 分组后条件列表select字段列表 order by 排序字段列表 limit 分页参数;
dcl数据控制语言
管理用户
查询用户--select * from mysql.user;
创建用户--create user ‘用户名’@‘主机名’identified by ‘密码’;
修改用户密码--alter user ‘用户名’@‘主机名’identified with mysql_native_password by '新密码';
删除用户--drop user ‘用户名’@‘主机名’;
权限控制
权限列表
all,all privileges所有权限
select 查询数据 insert 插入数据 update 修改数据 delete 删除数据 alter修改表 drop 删除表、数据库、视图 create创建数据库/表
查询用户权限--show grants for‘用户名’@ ‘主机名’;
授予权限--grant 权限列表 on 数据库名.表名
撤销权限--revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
函数
字符串函数
字符串拼接--select concat('Hello' , ' MySQL');
转小写--select lower('Hello');
全部转大写--select upper('hello')
左填充--select lpad(字段名, 位数, ‘填补内容’); rpad
去除空格--select trim('hello mysql');
截取字符串--select substring('hello mysql',1,5);
数值函数
向上取整--select ceil(1.1);
下floor 取模(余数)mod 获取随机数 select rand(); 四舍五入select round(2.344,2);与两位小数
日期函数
返回当前日期--select curdate();
时间--time();
日期和时间--now();
返回当前的年、月、日select year(now());、select month(now());、select day (now());
增加指定的时间间隔--select date_add(now(),interval 70 year);
获取两个日期相差的天数-- select datediff ('2021-01-23','2021-12-14');
流程函数
select if(value,t,f);value为真返回t,if null (value1,value2);如果value1不空返回value1,否则返回value2
case when [vall]then [res1] else[default] end
约束
约束类型
非空约束 not null
唯一约束 unique
主键约束 primary key
默认约束 default
检查约束 check
外键约束 foreign key
外键约束
保证一致性和完整性
添加外键--alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名)
多表查询
多表关系
一对多
多对多
建立第三张表
一对一
多表查询
内连接--相当于a、b交集部分数据
显示内连接--select 字段列表 from 表1[inner] join 表2 on 连接条件;
隐示内连接--select 字段列表 from 表1,表2 where 条件...;
外连接
左外连接--查询左表所有数据,以及两张表交集部分select 字段列表 from 表1 left [outer] join 表2 on 条件..;
自连接--必须使用表别名select 字段列表 from 表a 别名a join 表a 别名b on 条件...;
联合查询--多次查询的结果连接起来,字段类型和列表数都要一样--select * from 表a...union[all] select 字段列表 from 表b ...;
子查询
标量子查询-- 子查询结果示单个值
列子查询--结果为一列
in多选一
not in不在指定范围内
any 返回列表中有一个满足就可以
some =any
all 子查询返回列表的所有值都要满足
行子查询--结果为一行
表子查询--结果为表
in
事务
不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务的四大特性ACID
原子性atomicity
一致性consistency
隔离性isolation
持久性durability
控制事务sql
查看/设置事务提交方式
select @@autocommit;
set @@autocommit=0;手动提交
开启事务
start transaction 或者begin;
提交事务
commit;
回滚事务
rollback;
并发事务产生的问题
赃读:b读了a未提交的数据
不可重复读:a两次读取的数据不一样,中间被b提交了
幻读:a读的时候不存在,写的时候又存在
事务的隔离级别
隔离级别 脏读 不可重复读 幻读
read uncommentted ok ok ok
read committed no ok ok
rrepeatable read (默认) no no ok
serializable no no no
sql语句
查看事务隔离级别
select @@transaction_isolation;
设置事务隔离级别
set {session | global} transaction isolation level {read uncommitted |read committed | repeatable read | serializable }