悲觀鎖是在對數據進行操作之前就先加鎖,防止其他事務對數據進行修改,從而確保數據的一致性。在MySQL中,可以通過使用SELECT … FOR UPDATE語句來實現悲觀鎖。例如:
START TRANSACTION;
SELECT * FROM table_name WHERE ... FOR UPDATE;
-- 進行數據操作
COMMIT;
樂觀鎖是在事務操作中不加鎖,在更新數據時先檢查數據的版本號或時間戳等信息,如果數據版本號沒有變化,則可以進行更新操作,否則認為數據已經被其他事務修改,需要進行回滾操作。在MySQL中,可以通過在UPDATE語句中設置條件來實現樂觀鎖。例如:
START TRANSACTION;
SELECT * FROM table_name WHERE ...;
-- 進行數據操作
UPDATE table_name SET ... WHERE ... AND version = current_version;
COMMIT;
需要注意的是,樂觀鎖適用于并發寫入較少的情況,當并發寫入量較大時可能會導致更新失敗的情況,此時可以考慮使用悲觀鎖來確保數據的一致性。