目录
事务
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
start transaction; -- 开启事务 或者 begin 开启
...
rollback/commit; -- 回滚(全部失败)/提交(全部成功)
事务的四大特性ACID
- 原子性:事务中的操作要么全部成功,要么全部失败
- 一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态
- 隔离性:多个并发事务之间要相互隔离
- 持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的
事务日志用于保存对数据的更新操作
事务隔离级别
事务隔离级别分为读未提交、读已提交、可重复读、串行化四个级别。
隔离级别 |
脏读 |
不可重复读 |
幻读 |
读未提交 |
可能出现 |
可能出现 |
可能出现 |
读已提交 |
不会出现 |
可能出现 |
可能出现 |
可重复读 |
不会出现 |
不会出现 |
可能出现 |
串行化 |
不会出现 |
不会出现 |
不会出现 |
- 脏读:指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了不一定最终存在的数据,这就是脏读。
- 可重复读:指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的。通常针对数据更新(修改或删除)操作。
- 不可重复读:对比可重复读,不可重复读指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。通常针对数据更新(修改或删除)操作。
- 幻读:幻读是针对数据插入操作来说的。幻读官方定义,在一个事务中,前后两次使用了相同的查询语句,但是第二次查询发现了第一次查询时不存在的数据(中间没有插入操作),这种查询到了此前未存在的数据就是幻读。
个人看法:按照可重复读隔