我正在尝试在一条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语句?
发布于 2011-09-14 23:18:39
如前所述,您需要使用几个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;请参阅:http://dev.mysql.com/doc/refman/5.0/en/commit.html
发布于 2011-09-14 23:16:59
不,您不能在单个查询中完成此操作。但是,您可以尝试在事务中执行此操作,以便将其视为单个查询。要么一切都成功,要么什么都不发生。
这假设您的表是InnoDB类型的。MyISAM不支持事务。
发布于 2011-09-14 23:17:08
一点也不可能。进行单独的删除并将整个事务包装在一个事务中(如果您使用的是支持事务的语言,而不是MYSQL控制台,我不确定它是否支持事务)。
https://stackoverflow.com/questions/7418677
复制相似问题