我想将旧记录从表格移动到另一张表格。
如果我这样做:
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实现这一目标?
答案 0 :(得分:1)
据我所知,这是不可能的。如果要从旧表中删除数据,则必须显式发出删除命令。
答案 1 :(得分:1)
据我所知,执行此操作的唯一方法是运行INSERT查询,然后在源表上运行删除查询。没有其他方法可以实现它。
答案 2 :(得分:1)
一起执行这两个命令没有错。这是做你想做的事情的正确方法。
为了保证您实际上只删除了已移动的那些,您需要将命令包装在transaction中。
现在,您唯一可以质疑的是实际决定为归档和工作集设置不同的表。
这可能有两个原因:
单独的性能不应该是一个问题,使用适当的索引,直到你点击非常非常大量的记录。它会增加用户界面的复杂性,报告转化为维护(如上所述 - 如果不同的规则适用于存档记录,或者如果数据的结构不相同,则理由更容易)。