一、MySQL数据库基本概念-事务复习
1、事务理解
一次SQL会话中有多条写操作,这些写操作要吗同时成功,要么同时失败,这样的操作称为事务
举例:将甲银行卡中的钱转到乙账户,同时进行2个写操作,也即甲银行卡扣除转账金额同时乙银行卡增加同样金额,二者要么同时成功要么同时失败
2、事务的4大特性-ACID
特性 | 描述 |
---|---|
原子性 | 几条写操作不可分割,要么同时成功,要么同时失败,操作的最小单位 |
一致性 | 改变结果是一致的,例如,甲甲给乙转钱,甲扣多少乙就加多少 |
隔离性 | 俩个未提交的事务不可以相互影响 |
持久性 |
3、隔离级别
隔离级别 | 描述 |
---|---|
读未提交 | 所谓读未提交,就是读到其他别人未提交事务的内容,对应问题脏读。 |
读已提交 | 读到别人已经提交的内容,但是存在不可重复读的问题 |
可重复读 | 为MySQL默认的隔离级别,以前幻读问题,但是后来的版本的innoDB搜索引擎中已经将幻读问题解决 |
串行化 | 简单说就是将线性执行,执行完一个执行一个,安全级别最高,但是效率最低 |
注意:隔离级别安全性从上到下逐级提高,但是读未提交和串行化太过极端,在实际应用中根本不能使用
4、事务问题
问题 | 描述 |
---|---|
脏读 | 读到别人未提交的数据 |
不可重复读 | 一个事务内,读取到其他事务已提交的修改数据导致前后俩次数据情况不一致,叫做不可重复读 |
幻读 | 一个事务内多次读取同一条数据不一致,由其他事务插入数据导致 |
二、SQL执行顺序
from -> on -> join -> where ->group by - > 分组函数(例如:sum、count、max、gav) ->having -> select -> disinct - >order by -> linit