insert 一行數據的時候加的是什么鎖?為什么?
在 MySQL 中,當執行 INSERT
操作插入一行數據時,加鎖的情況會因存儲引擎和具體的事務隔離級別而有所不同。一般來說,在 InnoDB 存儲引擎下,INSERT
操作加的是行級排他鎖(Row Exclusive Lock),以下詳細說明原因。
行級排他鎖的應用
在 InnoDB 存儲引擎中,INSERT
操作通常會對要插入的行加行級排他鎖。行級排他鎖是一種針對單個行記錄的鎖,它的特點是當一個事務對某一行加了排他鎖后,其他事務不能對同一行進行讀寫操作,必須等待該鎖釋放。
加行級排他鎖的原因
- 保證數據的一致性:在并發環境下,多個事務可能同時嘗試向同一表中插入數據。如果沒有行級排他鎖,可能會出現兩個事務同時插入相同主鍵的記錄,從而導致主鍵沖突。例如,事務 A 和事務 B 同時要向用戶表中插入用戶 ID 為 100 的記錄,如果沒有鎖的機制,就可能會出現兩條用戶 ID 都為 100 的記錄,這顯然違反了主鍵的唯一性約束。而行級排他鎖可以確保在同一時刻只有一個事務能夠對某一行進行插入操作,避免了這種數據