首页 > 解决方案 > 是否可以根据插入日期从 MySQL 中删除记录

问题描述

我有一个 MySQL 表。该表没有时间戳,但我想删除在某个日期之后输入的所有记录。我尝试使用 created_at,但没有运气。

DELETE FROM table_name where created_at > '2021-02-09 00:00:00';

我的印象是 MySQL 维护了一个插入日期,我可以在删除语句中使用它。

编辑:

我没有 create_at 列,所以我修改了我的问题。是否可以删除最后插入的 100 条记录。我有这个查询可以准确地选择最后 100 条记录,但是我现在如何删除它们:

SELECT * FROM (SELECT * FROM table ORDER BY id DESC LIMIT 100) var1
ORDER BY id ASC;

标签: mysql

解决方案


是否可以根据插入日期从 Mysql 中删除记录

当您还记录了在插入点插入行的日期时,这才有可能。

幸运的是,这很容易用一个新的 MySQL 表开始,需要最少的维护和维护。

当您CREATE创建表格时,您应该添加一个作为timestamp列的行,然后可以通过将默认值设置为 来将其设置为插入日期CURRENT_TIMESTAMP。然后,您可以在DELETE查询中使用此列,正如其他人所引用的那样。

(通常也索引此列很有用)。

例子

表创建

CREATE TABLE `database`.`tableName` ( 
    `id` INT NOT NULL AUTO_INCREMENT , 
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , /* THIS COLUMN */ 
    `some_column` VARCHAR(50) NULL DEFAULT NULL ,
    `some_other_column` INT NULL DEFAULT NULL , 
    PRIMARY KEY (`id`)
) ENGINE = InnoDB; 

请注意,该created_at列将保存行生成的日期和时间戳。

现在; 当您插入数据时,您可以忽略此列,因为该值将由 MySQL 自动生成。

INSERT INTO `tableName` (`some_column`) VALUES ('horses!')

输出

id    created_at              some_column      some_other_column
 1    2021-02-12 13:28:53     horses!          NULL

因此,您可以根据需要删除。

DELETE FROM tableName WHERE `created_at` > '2021-02-09 00:00:00'

警告

如果您created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP追溯添加列定义,则时间戳将是生成列的日期,而不是插入现有行的日期。但未来的插入将是正确的。


推荐阅读