Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-将记录复制到另一个表并删除现有表_Mysql_Insert - Fatal编程技术网

MySQL-将记录复制到另一个表并删除现有表

MySQL-将记录复制到另一个表并删除现有表,mysql,insert,Mysql,Insert,我试图在一条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语句

我试图在一条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语句吗?

不,您不能在一个查询中实现这一点。但是,您可以尝试在事务中执行此操作,以便将其视为单个查询。要么一切都成功了,要么根本就没有发生


这假定您的表是InnoDB类型的。MyISAM不支持事务。

完全不可能。在事务中单独删除并包装整个内容(如果您使用的是支持事务的语言,而不是MYSQL控制台,我不确定它是否支持事务)。

如前所述,您需要使用几个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;

请参阅:

单用一个查询是不可能的。是的-这就是我的想法-但我至少可以使用一个语句插入范围内的记录吗?是的-它们是MyISAM,因为它们之间没有关系,所以不需要InnoDB。然后,您必须将其作为两个单独的查询来执行,希望中间不会出现任何中断。InnoDB不仅仅用于外键。它在没有FKs的情况下工作得非常好。能够使用事务是切换的一大好处——你唯一“失去”的就是全文索引。谢谢Marc——InnoDB不是也比MyISAM慢一点吗?此外,我以前也没有使用过事务——它们是在我与表交互时自动执行的,还是需要使用某些特定语句触发它们?此外,当我导出数据库结构时,它们是否也会被导出,或者在导入带有该结构的sql之后,我是否需要再次定义它们?InnoDB的开销比myisam稍多,在计数(*)等方面速度较慢,但在其他方面则更快,因为它支持行级锁定(myisam只有表级锁定)。默认情况下,它以自动提交模式运行-每个查询都会自动提交。您必须显式启动事务,或在自动提交关闭的情况下运行。如果执行mysqldump,它将以SQL命令语法的明文形式导出整个数据库(结构+数据)。它基本上生成了一个文件,可以像转储发生时一样重新创建整个数据库。对不起,马克-我将事务与例程混合在一起-因此事务就像一个包装器,可以同时执行多个语句-比如说INSERT INTO SELECT;删除,然后在事务结束时提交?谢谢Kevin-我想这回答了我的问题。如果我在
更新和删除级联到表
table_main
上有外键引用的其他表怎么办。如何归档这些表数据@凯文:像平常一样对待他们。。。删除相关表中的引用记录,直到可以删除主表数据为止。