mysql - 是否可以根据插入日期从 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 表开始,需要最少的维护和维护。
当您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
追溯添加列定义,则时间戳将是生成列的日期,而不是插入现有行的日期。但未来的插入将是正确的。
推荐阅读
- delphi - 在 Delphi 中 class(TInterfacedObject) 是否需要析构函数?
- generics - Trait:: 之间有什么区别
和 >? - python - 将基于 JSON API 数据的 Pandas 中的列表/数组类列写入 SQL 的问题
- jwt - 手动计算 JWT 签名永远不会输出真实的签名
- c++ - 我将如何计算输入的所有项目的总和然后计算总价?
- excel - 删除最后一位数字后的字符
- apache - Apache 负载均衡器删除 HTTP 请求正文
- python - 如何将以下 tf 1.x 代码转换为 tf 2.0(对现有代码的更改最少)
- matlab - 如何判断一个点是否在三角形内
- c# - Android OnActivityResult,在第二次调用第二个活动完成后不会返回到第一个活动