从表中删除旧记录并在日期之前将这些记录备份到新备份表中
Posted
技术标签:
【中文标题】从表中删除旧记录并在日期之前将这些记录备份到新备份表中【英文标题】:Delete old records from table and backup those records in new backup table before date 【发布时间】:2021-09-08 14:41:17 【问题描述】:我有一个 mysql 表,需要将 2021 年 1 月 1 日之前的旧记录备份到新的备份表中。并从原始表中删除 2021 年 1 月 1 日之前的旧记录。原始表有一个 created_on 列来过滤日期。我该怎么做?
【问题讨论】:
如何为此创建单个查询? 不行。除了这个单一的查询是CALL
到执行所需操作的 SP。但我不建议实际/存档表,而是分区。
这是两个不同的操作。这无法在一个查询中解决。下一步。
如果它需要两个操作,你能描述一下每个@Strawberry
如果您有其他问题,我建议您相应修改或删除此问题
当然,有一种方法可以“通过一个查询”执行所有操作。另一个查询的动作可能由 AFTER DELETE 触发器执行。但这是不合理的,过程会很慢。
【参考方案1】:
可能更快的方法是这样做:
-
创建一个新表:
CREATE TABLE new_table LIKE original_table;
-
将 2021 年 1 月 1 日的数据插入新表。根据数据,这可能比将旧数据插入新表要快得多。仅仅因为如果旧数据来自 2001 年,想象一下它与 2021 年半年的数据相比有多少行:
INSERT INTO new_table SELECT * FROM original_table WHERE created_on >= '2021-01-01';
-
重命名新旧表:
RENAME TABLE original_table TO old_table1;
RENAME TABLE new_table TO original_table;
-
检查新表中是否存在全年
2021
数据。确认后,您可以继续从旧表中删除 2021
数据或将其保留在那里;这取决于你。
【讨论】:
以上是关于从表中删除旧记录并在日期之前将这些记录备份到新备份表中的主要内容,如果未能解决你的问题,请参考以下文章