最快的方法来复制MySQL中的表?
我想在MySQL中复制一个表。 什么是最快的方法? 喜欢这个?
CREATE TABLE copy LIKE original; INSERT INTO copy SELECT * FROM original;
要么
CREATE TABLE copy SELECT * FROM original; ALTER TABLE copy ADD PRIMARY KEY (id);
还是有另一种方式?
编辑:我担心索引被重新创build,如何继续执行这些语句的MySQL?
PS。 不能使用像mysqldump这样的命令行工具,必须在运行中。
这立即复制表的结构,但不是数据:
CREATE TABLE copy LIKE original;
这创build了original
表的所有索引。
它在MySQL 5.1.39
这种方式工作。
使用MyISAM表的最快方式,同时保留索引 ),也许其他存储引擎是:
CREATE TABLE copy LIKE original; ALTER TABLE copy DISABLE KEYS; INSERT INTO copy SELECT * FROM original; ALTER TABLE copy ENABLE KEYS;
您希望禁用您的数据库加载密钥,然后重新创build密钥。
同样,对于InnoDB :
SET unique_checks=0; SET foreign_key_checks=0; ..insert sql code here.. SET unique_checks=1; SET foreign_key_checks=1;
(正如在评论中指出的那样)
从手册 :
“CREATE TABLE … SELECT不会自动为你创build任何索引,这样做是为了使语句尽可能灵活,如果你想在创build的表中有索引,你应该在SELECT语句之前指定这些:”
CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
您可以使用CREATE TABLE LIKE
和CREATE TABLE SELECT
来指定索引和数据types(以避免数据types转换)。 哪一个更快将取决于您的设置。
create table mynewtable (select * from myoldtable)
在MySQL中工作? 如果是的话,你也可以试试。
要使用索引和触发器进行复制,请执行以下2个查询:
CREATE TABLE newtable LIKE oldtable; INSERT newtable SELECT * FROM oldtable;
复制只是结构和数据使用这一个:
CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
最好的方法来复制结构和所有条目从一个表到另一个表(通过创build新表)是这个查询…
CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;
尝试SELECT INTO
,并使用variables作为SELECT INTO
。
首先,您必须创build接收表,使其具有与源表相同的结构。
最好的是,它是内部的,所以它的速度很快。 不过,你会失去你的索引。
如果您正在使用MyISAM,则还可以复制和重命名文件。 .MYD,.MYI,.FRM文件在后端
也许你可以看看SHOW CREATE TABLE
。
采取的步骤:
-
去phpmyadmin
-
转到SQL
执行这个查询
SHOW CREATE TABLE `the_old_table`;
- 点击选项选中“全文”,然后按“执行”。
结果是一个完整的CREATE TABLE语句。 编辑查询,直到你快乐。
资源: http : //dev.mysql.com/doc/refman/5.7/en/show-create-table.html
CREATE TABLE copy SELECT * FROM original;
是一个快速的方法,但可能不是索引的最快原因。