事务
1. 特性
A:atomic:事务是最小的执行单位,要么全部提交成功,要么失败就是回滚,不能只执行一部分。
C:consistency: 数据库总是从一个一致的状态转移到另一个一致的状态,即使系统崩溃了,事务做的修改没有提交,那么事务修改也不会保存到数据库。 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等
I:isolation:一个事务在提交之前对其他事务是不可见的。
D:durability:一旦事务提交,他做的修改会永远被保存下来,即使系统崩溃,修改的数据也不会丢失。
2.隔离级别
read uncommitted(未提交读):事务没有提交的时候对其他事务也是可见的。这个时候会发生脏读(事务读取未提交的数据)
read committed(已提交读):一个事务从修改开始到提交之前,做的修改对其他事务是不可见的。(也被叫做不可重复读,因为两次查询得到的值可能是不同的)
repeatable read(可重复读):保证多次读取的值是一致的,会产生幻读(当某个事务在读取某个范围的纪录的时候,有事务插入了新的纪录,之前的事务读取的时候会产生幻行)的问题
serialization(串行化):串行读取,在每一行都加锁,可能会产生锁争夺和超时的问题。
| 隔离级别 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加锁读 |
|---|---|---|---|---|
| 未提交读 | yes | yes | yes | no |
| 已提交读 | no | yes | yes | no |
| 可重复读 | no | no | yes | no |
| 串行化 | no | no | no | yes |
《高性能mysql》 爱mysql的一天