错误:超出锁定等待超时;尝试使用join重新启动事务/限制删除查询

时间:2016-02-10 12:53:11

标签: mysql sql sql-delete

我的表格中有columnimage_url”的重复条目“现在我想只删除重复项并保留每条记录的一条记录吗?

这是我试过的查询:

DELETE t1
FROM
    ad_images_copy t1
JOIN ad_images_copy t2 ON t2.image_url = t1.image_url
AND t2.id < t1.id

reference link for remove duplicate rows 但它给了我error

  

错误:超出锁定等待超时;尝试重新启动交易

现在我想限制此查询,因为我需要记录很多。

我尝试在最后添加limit,但它对我不起作用。

DELETE t1
    FROM
        ad_images_copy t1
    JOIN ad_images_copy t2 ON t2.image_url = t1.image_url
    AND t2.id < t1.id
limit 100 ;

如果有其他方法可以帮助。

1 个答案:

答案 0 :(得分:1)

要检查的一件事是image_urlid都在两个表上编入索引。 (可能id是主键,因此它将被编入索引,但您应该检查image_url是否已编入索引。)如果没有,请添加索引。

如果是这样,您可以尝试通过两个步骤来避免锁定。你的行是不可变的吗?如果是,那么您可以使用SELECT查询来查找要删除的所有行,然后使用一些批处理的DELETE来删除它们。这意味着您不会最终锁定整个表格。

只要您知道您正在查看的行不会在t2SELECT之间移动DELETE,就可以安全地执行此操作{1}}。