三范式

    范式( Normal Form)的基本分类:第一范式,第二范式,第三范式,巴斯-科德范式,第四范式,第五范式(完美范式)

第一范式:每列不可再分

第二范式: 一张表只描述一件事. 表中的每一个字段都依赖于主键

第三范式: 任何非主属性不依赖于其他非主属性(从表的外键必须使用主表的主键)

 

笛卡尔积现象

多表查询时左表的每条数据和右表的每条数据组合, 这种效果成为笛卡尔积

 

内连接

用左表的记录去匹配右表的记录,如果符合条件的则显示

    1.隐式内连接: 看不到join关键字, 条件使用 where指定

    2.显示内连接: 使用inner join...on 语句, 可以省略inner   select 字段名 from 左表 inner join 右表 on 条件

 

左外链接

select 字段名 from 左表 left outer join 右表 on 条件; 用左表的记录去匹配右表

右外链接

select 字段名 from 左表 right outer join 右表 on 条件; 用右表的记录去匹配左表

 

子查询

一条select语句结果作为另一条select语句语法一部分

1.子查询结果只要是单列,肯定在where后面作为条件. 是单列多行的情况,结果集类似于一个数组,父查询使用IN运算符.

2.子查询的结果是多行多列,肯定在from后面作为表

 

事务

1.操作事务

    手动提交事务

    start transaction 开启事务

    commit 提交事务

    rollback 回滚事务

    取消自动提交事务

    set autocommit = 0;

2.回滚点

    设置回滚点 savepoint 回滚点名字

    回滚到回滚点 rollback to 回滚点名字

3.事务四大特性

原子性(Atomicity)不可分割

一致性(Consistency)事务前后数据的完整性必须保持一致

隔离性(Isolation)多个事务间互不干扰

持久性(Durability)事务提交,它对数据库的改变是永久的

4.事务的隔离级别

并发访问的问题

脏读:一个事务读取到了另一个事务尚未提交的数据

不可重复读:一个事务中两次读取的数据内容不一致,这是事务update时引发的问题

幻读:一个事务中两次读取的数据的数量不一致,这是insert或delete时引发的问题

 

MySQL数据库有四种隔离级别:上面的级别最低

读未提交 read uncommitted 都未解决

读已提交 read committed 解决了脏读(Oracle和SQL Server的默认隔离级别)

可重复读 repeatable read 解决了不可重复读和脏读(MySQL的默认隔离级别)

串行化 serializable 都解决了

 

MySQL事务隔离级别相关命令

1.查询全局事务隔离级别

show variable like '%isolation%';或select @@tx_isolation;

2.设置事务隔离级别

set global transaction isolation level 级别字符串;