我正在尝试在一个sql语句中处理以下内容 - 我想将记录数复制到存档表中,然后立即从主表中删除现有的记录。
类似的东西:
INSERT INTO `table_archive`
SELECT * FROM `table_main`
WHERE `id` IN (1, 2, 3, 4)
REMOVE FROM `table_main` WHERE `id` IN (1, 2, 3, 4)
它基本上就像将记录从一个表切割并粘贴到另一个表中。
显然上面的陈述正是我想要实现的 - 任何想法是否可以实现,以及它是什么样的SQL语句?
答案 0 :(得分:3)
如上所述,您需要使用多个DML命令:
START TRANSACTION;
INSERT INTO `table_archive` SELECT * FROM `table_main` WHERE `id` IN (1, 2, 3, 4);
DELETE`table_main` WHERE `id` IN (1, 2, 3, 4);
COMMIT;
答案 1 :(得分:1)
不,您不能在单个查询中执行此操作。但是,您可以尝试在事务中执行此操作,以便将其作为单个查询进行处理。要么一切都成功,要么根本不成功。
这假设您的表是InnoDB类型。 MyISAM不支持交易。
答案 2 :(得分:1)
根本不可能。单独执行DELETE并将整个事物包装在事务中(如果使用支持事务的语言,而不是我不确定支持事务的MYSQL控制台)。