Read Uncommitted
2023-02-18 15:28:57 时间
Read Uncommitted是隔离级别最低的一种事务级别。在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty 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 UNCOMMITTED; | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
2 | BEGIN; | BEGIN; |
3 | UPDATE students SET name = 'Bob' WHERE id = 1; | |
4 | SELECT * FROM students WHERE id = 1; | |
5 | ROLLBACK; | |
6 | SELECT * FROM students WHERE id = 1; | |
7 | COMMIT; |
当事务A执行完第3步时,它更新了id=1
的记录,但并未提交,而事务B在第4步读取到的数据就是未提交的数据。
随后,事务A在第5步进行了回滚,事务B再次读取id=1
的记录,发现和上一次读取到的数据不一致,这就是脏读。
可见,在Read Uncommitted隔离级别下,一个事务可能读取到另一个事务更新但未提交的数据,这个数据有可能是脏数据。
相关文章
- 数据库运维 | 携程分布式图数据库NebulaGraph运维治理实践
- Oracle连接工具PLSQL登录时提示初始化失败,无法锁定OCI.dll错误解决
- SQL 入门篇之什么是别名?
- SQL ALTER TABLE 语句
- SQL AND & OR 运算符
- SQL BETWEEN 操作符
- MYSQL 不同的表格式,导致不同的存储空间消耗和性能差异 横向评测
- POSTGRESQL AUTO_EXPLAIN 记录慢语句的执行计划
- 一个好的数据库产品,除了本身好,细节请麻烦也注意一下
- POSTGRESQL COPY 命令导入数据,你还另一个更快的方案!
- MYSQL 8 UNDO 表空间 你了解多少
- Postgresql 如何降低 wal 占用磁盘空间,降低磁盘存储成本
- POSTGRESQL VS MYSQL 到底那个数据库 RDS 技术含量高 ?
- 经济前景不明下 2022 数据库预期与分析
- POSTGRESQL 跳动在PG内存中的锁 - spin lock
- POSTGRESQL 带时区的日期的技术与狠活
- POSTGRESQL lightweight lock 轻量级锁是什么 ?
- POSTGRESQL 提高POSTGRESQL性能的一些习惯 (1)
- MYSQL 8.030 的两个重要的变化,对MYSQL 预示着什么 MYSQL 变为 OMYSQL 9 吗
- MYSQL 备份到底怎么办,XTRABACKUP 还是 mysql enterprise backup (1)