Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MySQL数据库表中清除旧条目?_Mysql_Sql_Database_Triggers - Fatal编程技术网

如何从MySQL数据库表中清除旧条目?

如何从MySQL数据库表中清除旧条目?,mysql,sql,database,triggers,Mysql,Sql,Database,Triggers,我有一个MySQL数据库,其中有一个大表。一段时间后,它会变得太满,性能会下降。每个星期天,我都要删除上次更新时间早于一定天数的行 我该怎么做?也许您可以提供更多信息,说明如何将数据推送到数据库,以及如何处理数据库?因此,我们可以帮助你,而不必与黑暗斗争 我将提供一个简单的解决方案:这是一种变通方法,但可以: 每次触摸数据时,都会更新更新行中的时间戳 因此,你可以很容易地在每个星期天过滤掉它们 使现代化 作者自己提供的答案已经在Stackoverflow上讨论过了,相比之下,似乎并不是这样的 制

我有一个MySQL数据库,其中有一个大表。一段时间后,它会变得太满,性能会下降。每个星期天,我都要删除上次更新时间早于一定天数的行


我该怎么做?

也许您可以提供更多信息,说明如何将数据推送到数据库,以及如何处理数据库?因此,我们可以帮助你,而不必与黑暗斗争

我将提供一个简单的解决方案:这是一种变通方法,但可以:

每次触摸数据时,都会更新更新行中的时间戳

因此,你可以很容易地在每个星期天过滤掉它们

使现代化 作者自己提供的答案已经在Stackoverflow上讨论过了,相比之下,似乎并不是这样的

制作一个web服务器,每个周末向数据库发送以下SQL:

从表中删除时间戳

从表中删除

其中时间戳 我可能需要锁定以防止工作累积,例如:

DELIMITER //
CREATE EVENT testlock_event ON SCHEDULE EVERY 2 SECOND DO
BEGIN
 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
 BEGIN
   DO RELEASE_LOCK('testlock_event');
 END;
 IF GET_LOCK('testlock_event', 0) THEN
   -- add some business logic here, for example:
   -- insert into test.testlock_event values(NULL, NOW());
  END IF;
  DO RELEASE_LOCK('testlock_event');
END;
//
DELIMITER ;
最后答覆:

CREATE EVENT `purge_table` ON SCHEDULE
        EVERY 1 DAY
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT ''
    DO BEGIN
IF GET_LOCK('purge_table', 0) THEN
DELETE FROM table WHERE timestamp < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));
END;

桌子的设计是什么?有带时间戳的列吗

假设您这样做,您可以在delete命令中使用该时间戳值和datediffyour_date CURDATE


从datediffdate\u col,CURDATE>您的天数的表中删除。

制作一个计划事件以每晚运行查询。也请退房


为了把它安排在每个星期天运行,看看这篇文章,看看rkosegi的答案,我倾向于保留所有的行。您可能需要考虑分区方案。
CREATE EVENT `purge_table` ON SCHEDULE
        EVERY 1 DAY
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT ''
    DO BEGIN
DELETE FROM my_table WHERE my_timestamp_field <= now() - INTERVAL 5 DAY
END