1.sql语句分类:
DDL 数据库定义语言,用来定义数据库对象(数据库,表,字段)
DML 数据库操作语言,用来对数据库表中的数据进行增删改
DQL 数据库查询语言,用来查询数据库中表的记录
DCL 数据库控制语言,用来创建数据库用户,控制数据库的访问权限
2.mysql执行顺序:
select
字段列表 ④
from
表名列表 ①
where
条件列表 ②
group by
分组字段列表 ③
having
分组后条件列表
order by
排序字段列表 ⑤
limit
分页参数 ⑥
2.1 where 和 having 区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;
而having是分组之后对结果进行过滤
判断条件不同:where不能对聚合函数进行判断,而having可以
3.mysql的函数
字符串函数:
concat(拼接), lower(小写), upper(大写),lpad(左填充),rpad(右填充)
trim(去除字符串头部和尾部的空格),substring (截取字符串中的子串)
数值函数:
ceil 向上取整,floor 向下取整,mod 返回x/y的模
rand 返回0~1内的随机数
round 求参数x的四舍五入的值,保留y位小数
日期函数:
curdate() 返回当前日期, curtime() 返回当前时间
now()返回当前日期和时间, year(date) 获取指定date的年份
month(date) 获取指定date的月份, day(date) 获取指定date的日期
date_add(date,iterval expr type) 返回一个日期/时间值加上一个时间间隔expr 后的时间值
datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数
流程函数:
if(value,t,f) 如果value为true,则返回t,否则返回f;
ifnull(value1,value2) 如果value1不为空,返回value1,否则返回vaule2;
case when [val1] then [res1] ...else[default] end
如果val1为true,返回res1,...否则返回default的默认值
case[expr] when [val1] then [res1] ...else[default] end
如果expr的值等于val1,返回res1,...否则返回default的默认值
4.约束
约束:是作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确,有效性和完整性
分类:非空约束 限制该字段的数据不能为null not null
唯一约束 保证该字段的所有数据都是唯一,不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段的值,则采用默认值 default
检查约束 保证字段值满足某一个条件 check
外键约束 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 foreign key
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束
5.表关系
5.1 一对多(多对一)
5.2 多对多
5.3 一对一
6.多表查询
6.1 笛卡尔积查询
6.2连接查询
6.2.1 内连接
6.2.2外连接
6.2.3自连接
6.2.4联合查询
6.3子查询
1. 标量子查询
子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式。这种
子查询成为标量子查询
常用的操作符:= <> >= < <=
2. 列子查询
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询
常用的操作符:IN , NOT IN , ANY,SOME,ALL,
3. 行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询
常用的操作符:=,<>,IN,NOT,IN
4. 表子查询
子查询返回的结果是多行多列这种子查询为表子查询
常用的操作符:IN
6.4 总结
7.事务的隔离级别
读未提交 会出现脏读,不可重复读,幻读
读已提交 解决了脏读问题,出现了不可重复读,幻读问题
可重复读(mysql默认隔离级别) 解决了脏读,不可重复读问题,但是出现了幻读问题
串行化 解决了脏读,不可重复读,幻读问题
注意:事务隔离级别越高,数据约安全,但是性能越低