如何在 MySQL 表中仅存储 10 行?添加新行时应删除旧行,但只有在表有 10 行时才删除。
请帮我
您可以使用插入后触发器来实现此目的,删除最小日期所在的行。例如 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;
您可以在插入第一行时检索最后插入的 id,并将其存储在变量中。当插入 10 行时,删除第一个插入记录的 id < id 的行。请尝试一下。
首先使用您的插入查询插入所有值,然后运行此查询
delete from table_name where (cond) order by id desc limit 10
必须在一列中指定一个 ID 或时间