查询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条件,则会出现问题
1条答案
按热度按时间jc3wubiy1#
是的,死锁是可能的。
使用MySQL-8.0和MariaDB-10.6+中提供的SKIP LOCKED选项,以避免它们选择同一行。