1. Read Committed
允许读到其它事务已提交的、修改后的数据
2. 不可重复读(Non Repeatable Read)
在Read Committed隔离级别下,一个事务可能会遇到不可重复读(Non Repeatable Read)的问题。
不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。
3. 例子
我们仍然先准备好students
表的数据:
mysql> select * from students;
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
+----+-------+
1 row in set (0.00 sec)
然后,分别开启两个MySQL客户端连接,按顺序依次执行事务A和事务B:
时刻事务A事务B1// 设置隔离等级
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;2BEGIN;BEGIN;3// 读到Alice
SELECT * FROM students WHERE id = 1;
4// 将Alice修改为Bob
UPDATE students SET name = 'Bob' WHERE id = 1;
5COMMIT; 6// 读到Bob
SELECT * FROM students WHERE id = 1;
7 COMMIT;
当事务B第一次执行第3步的查询时,得到的结果是Alice
,随后,由于事务A在第4步更新了这条记录并提交,所以,事务B在第6步再次执行同样的查询时,得到的结果就变成了Bob
,因此,在Read Committed隔离级别下,事务不可重复读同一条记录,因为很可能读到的结果不一致。
https://www.liaoxuefeng.com/wiki/1177760294764384/1245266514539200