1.事务的ACID
原子性(Atomicity):事务执行要么全部成功,要么全部都不成功。 一致性(Consistent):事务必须让数据库从一个一致性状态转变为另一个一致性状态 隔离性(Isolation):排除其他事务对本事务的影响 持久性(Durable):事务完成后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。
2.事务的隔离级别
- 读未提交:A事务读到B事务还没有提交的数据,如果B回滚数据,则A就出现了脏读
- 读已提交:A事务从数据库中取出a数据为100,B事务对数据a减50,并提交事务,这时A事务再读a就变为 了50,前后读取的数据不一致,出现不可重复读
- 可重复读:当A事务开启事务时,B事务可以update(但update的数据A数据查不到),也可以Insert,A本来扫表查询出2条记录,B这时向表中插入一条数据,这时A查表发现是3条,似乎出现了幻读
- 可串行化:事务串行化顺序执行,不会出现以上现象
不可重复读与幻读有什么区别?
- 不可重复读的重点是修改:在同一事务中,同样的条件,第一次读的数据和第二次读的「数据不一样」(因为中间有其他事务提交了修改);
- 幻读的重点在于新增或者删除:在同一事务中,同样的条件,第一次和第二次读出来的「记录数不一样」(因为中间有其他事务提交了插入/删除)。
MySql基础
连接器
客户端经过tcp握手,验证身份,就连接到mysql,连接器一般默认空闲连接时间为8小时,如果我们数据库客户端太久没响应,就会自动断开连接
查询缓存
- MySql拿到一个请求后会先到缓存里看看,之前是不是执行过这条语句,他跟Redis一样,只要是你之前执行过的语句,都会在内存里面用key-value形式存储着。
- 但是缓存会因为这个表有任何更新,缓存就会全部被清空
-
分析器
词法分析,识别每个单词的语义
- 语法分析,看sql语法是否有误
优化器
优化你的查询,用哪个索引更好,优化器就是选择出最优的方案去执行器执行
数据库范式
第一范式:
数据组的每个属性只可以包含一个值
第二范式:
要求数据库表中的每个实体必须可以被唯一区分
第三范式:
不包含已在其他表中已包含的非主关键字信息
例如数据为:学号、姓名、班级、班主任 学号(决定)—->姓名 班级(决定)—->班主任 要把班级信息拆除出来 学生表、班级表
SQL执行顺序
1.执行from语句
2.执行on过滤
3.执行where过滤
4.执行group by 分组
5.使用having 过滤
6.select列表
7.执行DISTINCT子句
8.执行order by
