MySQL中的排斥鎖(也稱為共享鎖)是一種機制,它允許多個事務(wù)可以同時讀取同一行數(shù)據(jù),但只允許一個事務(wù)更新該數(shù)據(jù)行。當(dāng)一個事務(wù)獲取了排斥鎖時,其他事務(wù)只能獲得共享鎖,也就是說,其他事務(wù)只能讀取數(shù)據(jù),但不能更新數(shù)據(jù)。
但問題是,如果一個事務(wù)已經(jīng)獲取了排斥鎖,那么其它事務(wù)是否可以讀取該行數(shù)據(jù)呢?答案是肯定的。如果一個事務(wù)獲取了排斥鎖,其他事務(wù)可以在該數(shù)據(jù)行上獲取共享鎖,也就是可以讀取該數(shù)據(jù)行,但不能更新該數(shù)據(jù)行。
/* 獲取排斥鎖 */
BEGIN;
SELECT * FROM table WHERE id = 1 FOR UPDATE;
/* 其他事務(wù)可以在該行上獲取共享鎖 */
BEGIN;
SELECT * FROM table WHERE id = 1;
如上代碼所示,第一個事務(wù)在獲取排斥鎖之后,其他事務(wù)可以在該數(shù)據(jù)行上獲取共享鎖,也就是讀取該行數(shù)據(jù),但不能更新該行數(shù)據(jù)。這是MySQL中的一種常見的并發(fā)控制機制,可以有效避免數(shù)據(jù)的丟失和沖突。