0

如何在 MySQL 表中仅存储 10 行?添加新行时应删除旧行,但只有在表有 10 行时才删除。

请帮我

4

3 回答 3

1

您可以使用插入后触发器来实现此目的,删除最小日期所在的行。例如 DELETE FROM myTable WHERE myTimestamp = (SELECT MIN(myTimestamp) FROM myTable) 但理论上可以删除多行,具体取决于更新的粒度。

你可以有一个递增的序列,并且总是删除那个序列的最小值。

问题是您为什么要这样做?这是一个有点不寻常的要求。

一个基本示例(未验证/执行,我在这台特定机器上没有 mySQL)看起来像。

CREATE TRIGGER CycleOldPasswords AFTER INSERT ON UserPasswords FOR EACH ROW

    set @mycount = SELECT COUNT(*) FROM UserPasswords up where up.UserId = NEW.UserId;

    if myCount >= 10 THEN
        DELETE FROM UserPasswords up where up.Timestamp = (SELECT min(upa Timestamp) FROM UserPasswords upa WHERE NEW.UserId = upa.UserId) AND NEW.UserId = up.UserId;
    END
END;
于 2012-06-06T09:04:38.573 回答
0

您可以在插入第一行时检索最后插入的 id,并将其存储在变量中。当插入 10 行时,删除第一个插入记录的 id < id 的行。请尝试一下。

于 2012-06-06T09:05:29.010 回答
0

首先使用您的插入查询插入所有值,然后运行此查询

delete from table_name where (cond) order by id desc limit 10

必须在一列中指定一个 ID 或时间

于 2012-06-06T09:08:07.103 回答