删除行所以我有一个最大行限制

时间:2010-01-20 20:07:57

标签: mysql

以下是我试图在查询中解释的内容

DELETE FROM table ORDER BY dateRegistered DESC LIMIT 1000 *

我想在我已设计的脚本中运行此类查询。每次找到第1001条或更高级别的旧记录时,都会删除

如此设置Max Row大小,但删除所有旧记录。

实际上有一种方法可以在CREATE语句中设置它。

因此:如果我在数据库中有9023行,当我运行该查询时,它应删除8023行并留下1000

2 个答案:

答案 0 :(得分:4)

如果你有一个唯一的行ID,这是理论上正确的方法,但效率不高(即使你在dateRegistered列上有索引也没有):

DELETE FROM table
WHERE id NOT IN (
    SELECT id FROM table
    ORDER BY dateRegistered DESC
    LIMIT 1000
)

我认为通过直接按日期而不是行数来限制DELETE会更好。

我认为没有办法在CREATE TABLE声明中设置它,至少不是便携式声明。

答案 1 :(得分:3)

对于这个确切的工作,我立刻想到的唯一方法就是手动完成。

首先,锁定桌面。在执行此操作时,您不希望行数发生变化。 (如果锁定对您的应用程序不实用,则必须使用更聪明的排队系统而不是使用此方法。)

接下来,获取当前行数:

SELECT count(*) FROM table

一旦你有了这个,你应该用简单的数学计算出需要删除的行数。我们说它说1005 - 你需要删除5行。

DELETE FROM table ORDER BY dateRegistered ASC LIMIT 5

现在,解锁桌子。


如果锁定对您的方案不实用,则必须更加聪明 - 例如,选择需要删除的所有行的唯一ID,并将它们排队以逐渐删除。我会让你自己解决这个问题:)