欢迎访问原文地址来阅读最新版本
转载请注明出处:https://kang.fun/innodb-transaction
事务隔离级别
1. Read uncommitted
读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。
但是不能避免脏读的问题,即A事务中读取到了B事务中未提交的数据,但是B事务进行了回滚,A事务中这时候就持有了并不存在的脏数据。
2. Read committed
读提交,或者叫读已提交,就是一个事务要等另一个事务提交后才能读取数据。
- A事务中读取当前钱包余额为1块钱,并把它增加到2块钱,当事务并未提交
- 这时B事务开始执行,将余额从1块钱修改为3块钱,并成功提交事务,当前数据为3块钱
- A事务中再次读取,发现余额从1块钱变为3块钱
这就是“不可重复读”问题。也就是说,一次事务中两次读取相同的数据却发现数据不一致了。
3. Repeatable read(Mysql默认)
可重复读,就是在开始读取数据(事务开启)时,不再允许修改操作,但允许写操作。
但是仍旧无法避免幻读问题。
什么是幻读?
假设数据库中订单表数据如下:
id | 订单号 | 金额(元) |
---|---|---|
3 | NO6138957973613045 |