Mysql 會導致鎖表的語法

2021-07-04 18:53:39 字數 1703 閱讀 6715

最近再找一些mysql鎖表原因,整理出來一部分sql語句會鎖表的,方便查閱,整理的不是很全,都是工作中碰到的,會持續更新

筆者能力有限,如果有不正確的,或者不到位的地方,還請大家指出來,方便你我,方便大家。

此測試環境

mysql 5.5 基於innodb 引擎

[sql]view plain

copy

insert

into

table1 

values

select

… from

table2 ….  

此種方法,會鎖table2

[sql]view plain

copy

delete

table1  

from

table1 

inner

join

table2  

ontable1.id=table2.id  …  

此種方法,會鎖table2

[sql]view plain

copy

update

tabel1,table2 

settable1.

name

=』feie』 

where

table1.id=table2.id  

此種方法,會鎖table2

[sql]view plain

copy

update

tabel1,table2 

settable1.

name

=』feie』 

where

table1.id=table2.id 

andtable1.id=1;  

此種方法,會鎖table2.id=1的記錄

-----------------------------------------第二次編輯分割線--------------------------------------

假設kid 是表table 的 乙個索引字段

且值不唯一

1.如果kid 有多個值為12的記錄那麼:

update table  set name=』feie』 where kid=12;  

會鎖表2.如果kid有唯一的值為1的記錄那麼:

update table  set name=』feie』 where kid=1;  

不會鎖總結:用索引欄位做為條件進行修改時, 是否表鎖的取決於這個索引字段能否確定記錄唯一,當索引值對應記錄不唯一,會進行鎖表,相反則行鎖。

如果有兩個delete

kid1 與 kid2是索引字段

語句1 delete from table where  kid1=1 and kid2=2;

語句2 delete from table where  kid1=1 and kid2=3;

這樣的兩個delete 是不會鎖表的

語句1 delete from table where  kid1=1 and kid2=2;

語句2 delete from table where  kid1=1 ;

這樣的兩個delete 會鎖表

總結:同乙個表,如果進行刪除操作時,盡量讓刪除條件統一,否則會相互影響造成鎖表

Mysql 會導致鎖表的語法

最近再找一些mysql鎖表原因,整理出來一部分sql語句會鎖表的,方便查閱,整理的不是很全,都是工作中碰到的,會持續更新 筆者能力有限,如果有不正確的,或者不到位的地方,還請大家指出來,方便你我,方便大家。此測試環境 mysql 5.5 基於innodb 引擎 sql view plain copy...

Mysql 會導致鎖表的語法

最近再找一些mysql鎖表原因,整理出來一部分sql語句會鎖表的,方便查閱,整理的不是很全,都是工作中碰到的,會持續更新 筆者能力有限,如果有不正確的,或者不到位的地方,還請大家指出來,方便你我,方便大家。此測試環境 mysql 5.5 基於innodb 引擎 insert into table1 ...

Mysql 會導致鎖表的語法

最近再找一些mysql鎖表原因,整理出來一部分sql語句會鎖表的,方便查閱,整理的不是很全,都是工作中碰到的,會持續更新 筆者能力有限,如果有不正確的,或者不到位的地方,還請大家指出來,方便你我,方便大家。此測試環境 mysql 5.5 基於innodb 引擎 sql view plaincopy ...