我在我的网站上运行积分系统,所以我需要将用户的不同操作的日志保存到数据库中。问题是我有太多用户并永久保留所有记录可能导致服务器过载...我有办法只保留每个用户10条记录并自动删除旧条目? mysql是否有一些功能呢?
提前致谢
答案 0 :(得分:3)
您可以添加一个触发器来处理删除旧条目。 例如,
DELIMITER //
CREATE definer='root'@'localhost' TRIGGER afterMytableInsert AFTER INSERT ON MyTable
FOR EACH ROW
BEGIN
DELETE FROM MyTable WHERE user_id = NEW.user_id AND id NOT IN
(SELECT id FROM MyTable WHERE user_id = NEW.user_id ORDER BY action_time DESC LIMIT 10);
END//
答案 1 :(得分:2)
只需运行一个删除第11个n记录的每小时cron作业。
答案 2 :(得分:2)
在插入记录之前,您可以先检查用户的数量。如果他们有> = 10删除最旧的那个。然后插入新的。
答案 3 :(得分:1)
如果您的目标是让数据库确保对于给定的表,每个给定的子键(用户)永远不会超过N行,那么解决此问题的正确方法是:
如果您已经在使用存储过程进行数据访问,那么修改插入过程最有意义,否则触发器将是最简单的解决方案。
或者,如果您的目标是定期删除旧数据,那么使用cron作业启动存储过程来修剪旧数据将是最有意义的。
答案 4 :(得分:0)
DELETE FROM Table WHERE ID NOT IN (SELECT TOP 10 ID FROM Table WHERE USER_ID = 1) AND USER_ID = 1
更清晰的版本
DELETE FROM Table
WHERE ID NOT IN
(
SELECT TOP 10 ID FROM Table WHERE USER_ID = 1
)
AND USER_ID = 1
答案 5 :(得分:0)
为用户插入新记录时。在此之前做一个这样的查询(不要忘记where
- 条件):
DELETE FROM tablename WHERE userID = 'currentUserId' LIMIT 9, 999999
之后,您可以插入新数据。这样可以使每个用户的数据始终保持10条记录。
INSERT INTO tablename VALUES(....)