MySQL数据库入门到精通(基础篇)
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默认隔离级别) 解决了脏读,不可重复读问题,但是出现了幻读问题 串行化 解决了脏读,不可重复读,幻读问题 注意:事务隔离级别越高,数据约安全,但是性能越低