MySQL - 将表的子集移动到另一个表中

时间:2011-02-28 09:48:55

标签: mysql

我想将旧记录从表格移动到另一张表格。

如果我这样做:

INSERT INTO archived_item SELECT * FROM item WHERE is_sold=1 AND sold_at < DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH)

我只想复制行。但我需要移动他们。

我不认为在上一个查询之后运行此查询是理想的:

DELETE FROM item WHERE is_sold=1 AND sold_at < DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH)

我也不想使用任何外部工具。

是否可以通过SQL实现这一目标?

3 个答案:

答案 0 :(得分:1)

据我所知,这是不可能的。如果要从旧表中删除数据,则必须显式发出删除命令。

答案 1 :(得分:1)

据我所知,执行此操作的唯一方法是运行INSERT查询,然后在源表上运行删除查询。没有其他方法可以实现它。

答案 2 :(得分:1)

一起执行这两个命令没有错。这是做你想做的事情的正确方法。

为了保证您实际上只删除了已移动的那些,您需要将命令包装在transaction中。

现在,您唯一可以质疑的是实际决定为归档和工作集设置不同的表。

这可能有两个原因:

  • 性能
  • 应用于两套的不同数据完整性规则

单独的性能不应该是一个问题,使用适当的索引,直到你点击非常非常大量的记录。它会增加用户界面的复杂性,报告转化为维护(如上所述 - 如果不同的规则适用于存档记录,或者如果数据的结构不相同,则理由更容易)。