Discuss / SQL / 事务理解问题

事务理解问题

Topic source

来日_方

#1 Created at ... [Delete] [Delete and Lock User]

可以理解成Read Committed隔离级别下,一个事务只能查询到别的事务cimmit过的更新吗?如果是这样的话,例子里事务A第4,5步中,事务B再查询一次是不是更好一点。

衬衫反穿i

#2 Created at ... [Delete] [Delete and Lock User]

好像是啊

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

事务B不知道事务A的存在,有可能读100次都是一样的结果,也有可能读两次两次不一样。

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

所以正确写法就是只读一次,不要再去读了。

着实没有理解到,我也试过在 4.5(4 和 5 中间一步) 步查询一次,确实读不到 A 更新但未提交的数据。

所以理解不了下面这两句话中说的,居然会出现 4.5 读两次会不一样,而且只读一次是正确做法?

> 也有可能读两次两次不一样。

> 所以正确写法就是只读一次,不要再去读了。

洋火2005

#6 Created at ... [Delete] [Delete and Lock User]

4,5步的脏读会查询到A在update执行的数据,不可重复读就不会变。这取决于第1步。

uncommitted:未提交

committed:提交

read uncommitted 隔离级别下,一个事务可以读到另一个事务更新数据后未提交的数据

read committed 隔离级别下,一个事务在另一个事务更新数据后,不能读取另一个事务更新数据后 **未提交 **的数据(或者说想读取更新后的数据,必须在提交事务后;在提交事务前,只能读取到更新前的数据)

funday--2018

#8 Created at ... [Delete] [Delete and Lock User]

感觉一只小蝎子正解

为什么不在4.5步的时候查询,其实就是为了告诉里面这个隔离等级中,b只能查询到已经提交过的数据,没提交的是查不到的。同时廖老师也说了b是不知道a的存在的,可能只是恰好在查询的时候,a在更新。READ COMMITTED的翻译也就是读提交过的数据。


  • 1

Reply