定義
鎖表(Lock Table)
在要更新資料表的資料時,MySQL會將表資料鎖定無法讀取,直到資料異動完畢,MyISAM預設支援Table-level lock,而InnoDB預設支援Row-level lockTable-level lock
資料表資料異動時,將「整個資料表(Table)」都鎖定住無法讀取Row-level lock
資料表資料異動時,將「要更新的資料列(row)」都鎖定住無法讀取注意事項
在使用
Row-level lock時必需要明確指定要異動資料的主鍵(Primary Key),否則將會改用Table-level lock去做資料表的異動範例
假設有user資料表,裡面有id與name的欄位,id是主鍵
| SQL | Table lock | Row lock | No lock | 備註 |
|---|---|---|---|---|
| SELECT * FROM user WHERE id='1' FOR UPDATE; |
v
|
明確指定主鍵,並且有此筆資料,row lock | ||
| SELECT * FROM user WHERE id='-1' FOR UPDATE; |
v
|
明確指定主鍵,若查無此筆資料,無 lock | ||
| SELECT * FROM user WHERE name='KeJyun' FOR UPDATE; |
v
|
無主鍵,table lock | ||
| SELECT * FROM user WHERE id<>'1' FOR UPDATE; |
v
|
主鍵不明確,table lock | ||
| SELECT * FROM user WHERE id LIKE '3' FOR UPDATE; |
v
|
主鍵不明確,table lock |











