Read Committed
2023-02-18 15:28:57 时间
在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 字符串与时间操作函数
- 客快物流大数据项目(九十七):ClickHouse的SQL语法
- MySQL 索引与性能调优
- PHP 应用PDO技术操作数据库
- 客快物流大数据项目(九十八):ClickHouse的SQL函数
- HTTP请求头引发的注入问题 (SQL注入)
- C/C++ 静态编译SQLITE数据库API
- MySQL创建数据库基础篇
- 数据库设计范式之逻辑设计
- MySQL创建数据库基础篇
- MySQL 数据库读写分离
- C/C++ Qt 数据库QSql增删改查组件应用
- C/C++ Qt 数据库与TreeView组件绑定
- C/C++ Qt 数据库与ComBox多级联动
- C/C++ Qt 数据库与TableView多组件联动
- C/C++ Qt 数据库与SqlTableModel组件应用
- MySQL创建数据表基础篇
- C/C++ Qt 数据库SqlRelationalTable关联表
- C/C++ Qt 数据库与Chart实现历史数据展示
- 基于SpringBoot+Mybatis框架的私人影院预约系统(附源码,包含数据库文件)