鍍金池/ 問答/Python  數(shù)據(jù)庫/ mysql for update

mysql for update

環(huán)境:mysql 5.7
事務隔離級別 repeatable read

表當前的記錄如下:
clipboard.png

會話一:開啟事務,開啟排它鎖
clipboard.png

會話二:試圖更新 id = 2的數(shù)據(jù), 被阻塞。
clipboard.png

會話一:提交事務
clipboard.png

會話一 提交事務,會話二 SQL成功執(zhí)行
clipboard.png

會話二 提交事務。
clipboard.png

在會話一 查詢表,發(fā)現(xiàn)會話二的更新沒有成功
clipboard.png

再次提交, 并重新查詢,查到會話二更新的數(shù)據(jù)
clipboard.png

我的問題是:為什么,我會話一需要再提交一次,才能查看到會話二更新的數(shù)據(jù)??

不用 for update. 就是簡簡單單的 開2個事務。 會話2 更新完數(shù)據(jù),并提交事務。 會話1提交事務,并查看數(shù)據(jù),是可以查看到 會話2更新的數(shù)據(jù)的

回答
編輯回答
短嘆

事務會話期間能不能看到改動和事務的隔離級別有關.

參見官方文檔:
https://dev.mysql.com/doc/ref...

默認情況下是REPEATABLE READ, 可重復讀,即在事務期間的多次讀取返回同樣的結(jié)果.

BTW:
mysql定義的四種隔離級別沒有 repetable commit這個.

官網(wǎng)上只有

level:

   REPEATABLE READ
   READ COMMITTED
   READ UNCOMMITTED
   SERIALIZABLE

2018年9月17日 00:05