代码之家  ›  专栏  ›  技术社区  ›  Angel.King.47

删除行,使我有最大行限制

  •  4
  • Angel.King.47  · 技术社区  · 16 年前

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

    DELETE FROM table ORDER BY dateRegistered DESC LIMIT 1000 *
    

    我想在我已经设计好的脚本中运行这样的查询。每次它发现第1001条或以上的旧记录时,都会删除

    所以可以设置最大行大小,但删除所有旧记录。

    实际上,在create语句中是否有一种设置方法。

    因此:如果数据库中有9023行,那么在运行该查询时,它应该删除8023行,并保留1000行。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Matchu    16 年前

    对于这项精确的工作,我唯一能立即想到的方法就是手动操作。

    首先,把桌子锁上。您不希望在执行此操作时更改行数。(如果一个锁不适用于你的应用程序,你将不得不设计出一个更聪明的排队系统,而不是使用这种方法。)

    接下来,获取当前行数:

    SELECT count(*) FROM table
    

    一旦你有了它,你应该用简单的数学计算出有多少行需要删除。比如说1005行-你需要删除5行。

    DELETE FROM table ORDER BY dateRegistered ASC LIMIT 5
    

    现在,打开桌子。


    如果一个锁不适合您的场景,那么您必须更聪明一点——例如,选择需要删除的所有行的唯一ID,然后将它们排队以逐步删除。我会让你自己解决的:)

        2
  •  4
  •   Bandi-T    16 年前

    如果您有一个行的唯一ID,那么这是理论上正确的方法,但它不是非常有效(即使您在 dateRegistered 专栏):

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

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

    我认为没有办法在 CREATE TABLE 声明,至少不是可移植声明。