以下是我试图在查询中解释的内容
DELETE FROM table ORDER BY dateRegistered DESC LIMIT 1000 *
我想在我已设计的脚本中运行此类查询。每次找到第1001条或更高级别的旧记录时,都会删除
如此设置Max Row大小,但删除所有旧记录。
实际上有一种方法可以在CREATE语句中设置它。
因此:如果我在数据库中有9023行,当我运行该查询时,它应删除8023行并留下1000
答案 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,并将它们排队以逐渐删除。我会让你自己解决这个问题:)