Read Committed
Read
2023-09-14 09:14:13 时间
在Read Committed隔离级别下,一个事务可能会遇到不可重复读(Non Repeatable Read)的问题。
不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。
我们仍然先准备好students
表的数据:
mysql> select * from students;
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
+----+-------+
1 row in set (0.00 sec)
然后,分别开启两个MySQL客户端连接,按顺序依次执行事务A和事务B:
时刻 | 事务A | 事务B |
---|---|---|
1 | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; |
2 | BEGIN; | BEGIN; |
3 | SELECT * FROM students WHERE id = 1; -- Alice | |
4 | UPDATE students SET name = 'Bob' WHERE id = 1; | |
5 | COMMIT; | |
6 | SELECT * FROM students WHERE id = 1; -- Bob | |
7 | COMMIT; |
当事务B第一次执行第3步的查询时,得到的结果是Alice
,随后,由于事务A在第4步更新了这条记录并提交,所以,事务B在第6步再次执行同样的查询时,得到的结果就变成了Bob
,因此,在Read Committed隔离级别下,事务不可重复读同一条记录,因为很可能读到的结果不一致。
相关文章
- 数据库隔离级别—MySQL的默认隔离级别就是Repeatable,Oracle默认Read committed,最高级别Serializable
- MySQL启动报错[ERROR] Fatal error: Please read “Security“ section of the....to run mysqld as root!
- fatal: could not read Username for ‘https://gitee.com’: No such device or address
- ORA-42308: view string.string is already in read-only mode ORACLE 报错 故障修复 远程处理
- ORA-01187: cannot read from file string because it failed verification tests ORACLE 报错 故障修复 远程处理
- ORA-13043: failed to read metadata from the _SDOLAYER table ORACLE 报错 故障修复 远程处理
- MySQL Status Innodb_buffer_pool_read_ahead 数据库状态作用意思及如何正确
- Oracle 等待事件 BFILE read 官方解释,作用,如何使用及优化方法
- 汇率查询(OB08)和转换:READ_EXCHANGE_RATE详解编程语言