Mysql
當我在表被鎖定的情況下嘗試將數據插入 mysql 時會發生什麼?
簡單的問題,但不知何故無法找到明確的答案:
當我在表被鎖定的情況下嘗試將數據插入 mysql 時會發生什麼?
INSERT 查詢失敗
INSERT 查詢等待直到鎖被釋放
別的東西
“正常”結果是 INSERT 查詢等到鎖被釋放。但是有一些限制和特殊情況(你寫了關於鎖定 TABLES 所以 MyISAM 或顯式
LOCK TABLES
語句)
- 等待可以超時(lock_wait_timeout)
- 當您只是追加到表的末尾時,並發插入是可能的,在這種情況下,不會發生等待並且插入並行執行。這需要鎖定隱式地源自其他 INSERT/SELECT 等或顯式地源自
READ LOCAL
表鎖。如果在沒有LOCAL
修飾符的情況下顯式鎖定表,則無法按照手冊使用此功能。但是現在你應該主要使用 InnoDB 引擎和事務。在這種情況下,通常不使用顯式表鎖。仍然可以有元數據鎖。但是根據手冊InnoDB 不會將行鎖升級為表鎖,而是根據https://www.percona.com/blog/2010/06/08/table-locks-in-show-innodb-使用多粒度鎖定狀態/。
使用行鎖,許多操作可以並行執行,並且只有在插入應該將插入行放入的間隙上存在間隙鎖時,插入才應該等待。