死锁的一种

关于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会发生死锁

你可能感兴趣的:(dead-lock)