MySQL中的U鎖是一種行級別的鎖,也被稱為“更新鎖”。它的作用是在讀取行時將其鎖定,以防止其他會話對該行進行更新。
在MySQL中,當一個事務需要讀取一行數據時,事務會獲取一個共享鎖(S鎖)。這意味著如果另一個事務也需要讀取該行數據,則它將被阻塞。相反,U鎖允許其他事務讀取該行,但是防止它被更新。只有當當前事務釋放了它的U鎖時,其他事務才能對該行進行更新。
下面是使用U鎖的示例代碼:
BEGIN TRAN SELECT * FROM myTable WHERE id=1 FOR UPDATE -- 這里將會獲得一個U鎖 -- 對于其他會話,可以使用SELECT ... LOCK IN SHARE MODE獲取共享鎖來讀取該行數據,但無法更新 -- 更新該行數據 UPDATE myTable SET name='new name' WHERE id=1 -- 下一次使用SELECT ... FOR UPDATE查詢時需要等待當前事務的提交或回滾 COMMIT
需要注意的是,U鎖可能導致死鎖和性能問題。因此,應謹慎使用U鎖,盡量避免并發性能不佳的情況下使用。