在MySQL中,悲觀鎖和樂觀鎖是兩種常見的并發(fā)控制方式。
悲觀鎖是一種獨(dú)占鎖,它假設(shè)在任何時(shí)候都會(huì)有其他線程嘗試訪問同一數(shù)據(jù)。因此,在操作數(shù)據(jù)之前,悲觀鎖會(huì)將數(shù)據(jù)鎖定,以確保其他線程不能訪問該數(shù)據(jù)。悲觀鎖適用于多寫的場(chǎng)景,比如在一個(gè)高并發(fā)的數(shù)據(jù)寫入業(yè)務(wù)中。
SELECT ... FOR UPDATE;
UPDATE ...
在MySQL中,下面的示例代碼演示了如何使用悲觀鎖。在SELECT語句之后,使用FOR UPDATE來鎖定數(shù)據(jù)。在UPDATE語句之后,悲觀鎖會(huì)釋放鎖。
樂觀鎖是一種非獨(dú)占鎖,它假設(shè)在大多數(shù)情況下不會(huì)有其他線程嘗試訪問同一數(shù)據(jù)。因此,在操作數(shù)據(jù)之前,樂觀鎖并不會(huì)鎖定數(shù)據(jù),而是假設(shè)數(shù)據(jù)沒有被修改,并在更新之前檢查數(shù)據(jù)版本號(hào)。如果版本號(hào)一致,則將更新成功。否則,更新將被拒絕,以避免數(shù)據(jù)的沖突。樂觀鎖適用于多讀的場(chǎng)景,比如在一個(gè)高并發(fā)的數(shù)據(jù)讀取業(yè)務(wù)中。
SELECT ...
WHERE version = ?
UPDATE ... SET version = ? WHERE version = ?
在MySQL中,下面的示例代碼演示了如何使用樂觀鎖。在SELECT語句之后,使用版本號(hào)來檢查數(shù)據(jù)是否已被修改。在UPDATE語句之后,將版本號(hào)更新為新版本號(hào)。