您当前的位置: 首页 >  数据库
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数据库学习笔记3-隔离级别 Read Uncommitted

软件工程小施同学 发布时间:2021-02-24 23:11:25 ,浏览量:0

1. Read Uncommitted

Read Uncommitted允许读到尚未提交的事务的修改之后的数据。

 

2. 脏读

Read Uncommitted是隔离级别最低的一种事务级别。

在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty 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 UNCOMMITTED;

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;2

// 开始事务

BEGIN;

BEGIN;3

// 更新Alice为Bob

UPDATE students SET name = 'Bob' WHERE id = 1;

 4 

// 读到“Bob"

SELECT * FROM students WHERE id = 1;

5

// 回滚

ROLLBACK;

 6 

// 读到”Alice"

SELECT * FROM students WHERE id = 1;

7 COMMIT;

 

当事务A执行完第3步时,它更新了id=1的记录,但并未提交,而事务B在第4步读取到的数据就是未提交的数据。

随后,事务A在第5步进行了回滚,事务B再次读取id=1的记录,发现和上一次读取到的数据不一致,这就是脏读。

可见,在Read Uncommitted隔离级别下,一个事务可能读取到另一个事务更新但未提交的数据,这个数据有可能是脏数据。

 

 

 

 

https://www.liaoxuefeng.com/wiki/1177760294764384/1219071817284064

关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

0.0645s