死鎖的一種

關於oracle的update in(,)的時候的死鎖問題mysql

同一個prepare語句,生成最終的sql以下sql

update table1 set name = #name# where id in (id1,id2,id3)

當兩個如上的sql
sql1數據庫

update table1 set name = #name# where id in (id1,id2,id3)

sql2oracle

update table1 set name = #name# where id in (id3,id2,id1)

當sql1和sql2同時執行的時候會產生死鎖的問題code

解決方法很簡單,in裏面的數據排個序就能夠了索引

另外一種死鎖(mysql場景,別的數據庫沒有嘗試過)

表結構ci

create table table1 (
id number,
a_id number,
c_id number);

索引table

index: cid,a_id
primary key : id

數據date

insert into talbe1(1, 1, 1);
insert into talbe1(2, 1, 1);
insert into talbe1(3, 2, 1);
insert into talbe1(4, 2, 1);

死鎖語句
sql1方法

delte from table1 where id = id1;

sql2

delte from table1 where a_id = a_id1;

同時執行sql1和sql2會發生死鎖

相關文章
相關標籤/搜索