关于oracle的update in(,)的时候的死锁问题
同一个prepare语句,生成最终的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)
sql2
update table1 set name = #name# where id in (id3,id2,id1)
当sql1和sql2同时执行的时候会产生死锁的问题
解决方法很简单,in里面的数据排个序就可以了
另一种死锁(mysql场景,别的数据库没有尝试过)
表结构
create table table1 (
id number,
a_id number,
c_id number);
索引
index: cid,a_id
primary key : id
数据
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会发生死锁