MySQL中的鎖是用來保證并發訪問數據時的數據一致性的。SQL語句在執行的過程中,會使用鎖保證操作的原子性、一致性和隔離性。在MySQL中,鎖主要分為共享鎖和排他鎖兩種類型。
-- 共享鎖示例 SELECT * FROM table_name WHERE id = 1 LOCK IN SHARE MODE; -- 排他鎖示例 SELECT * FROM table_name WHERE id = 1 FOR UPDATE;
在MySQL中,當一個事務獲得了某個數據行的鎖,其他事務要對該數據行進行修改或者讀取時,就需要等待該事務釋放鎖。
MySQL中加鎖的方式有兩種:
- 語句加鎖
- 共享鎖(S鎖):SELECT語句加上LOCK IN SHARE MODE或者FOR UPDATE子句時會加上共享鎖。
- 排他鎖(X鎖):UPDATE、DELETE、INSERT語句會加上排他鎖。
- 手動加鎖
語句加鎖是在執行SQL語句的過程中,自動加鎖以保證操作的原子性、一致性和隔離性。MySQL自動加鎖的方式有兩種:
手動加鎖是通過SELECT ... FOR UPDATE 和 SELECT ... LOCK IN SHARE MODE兩種方式手動加鎖。手動加鎖需要程序員手動控制,一般用于特定場景下需要對多個數據行進行修改的情況。
-- 共享鎖示例 SELECT * FROM table_name WHERE id = 1 LOCK IN SHARE MODE; -- 排他鎖示例 SELECT * FROM table_name WHERE id = 1 FOR UPDATE;