mysql 死锁并选择更新

ryevplcw  于 2023-05-05  发布在  Mysql
关注(0)|答案(1)|浏览(146)

查询Q1. select * from table where id = 1;查询Q2. select * from table where unique_id =“x”;
如果两个返回同一行是否仍可能死锁?
螺纹T1。

BEGIN
select * from table where id = 1 for update;
update ... table where id = 1;
Commit;

螺纹T2。

BEGIN
select * from table where unique_id = "x" for update;
update ... table where id = 1;// updating with id=1
Commit;

假设T1和T2同时被调用。
这是导致死锁的原因吗?如果我们在查询中使用不同的“where条件”,即使它返回相同的行,也会有问题吗?
在大多数情况下,尝试使用select进行更新,但发现如果我在更新查询中使用不同的where条件,则会出现问题

jc3wubiy

jc3wubiy1#

是的,死锁是可能的。
使用MySQL-8.0和MariaDB-10.6+中提供的SKIP LOCKED选项,以避免它们选择同一行。

相关问题