關於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裏面的數據排個序就能夠了索引
表結構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會發生死鎖