我想在MySQL中复制一个表.什么是最快的方式?像这样?
CREATE TABLE copy LIKE original;
INSERT INTO copy SELECT * FROM original;
Run Code Online (Sandbox Code Playgroud)
要么
CREATE TABLE copy SELECT * FROM original;
ALTER TABLE copy ADD PRIMARY KEY (id);
Run Code Online (Sandbox Code Playgroud)
还是有另一种方式?
编辑:我担心重新创建索引,mysql如何继续执行这些语句?
PS.不能使用像mysqldump这样的命令行工具,必须是即时的.
cet*_*ras 50
这会立即复制表的结构,但不会复制数据:
CREATE TABLE copy LIKE original;
Run Code Online (Sandbox Code Playgroud)
这将创建original表所具有的所有索引.
它在mysql中以这种方式工作5.1.39.
ctb*_*own 44
使用MyISAM表同时保留索引的最快方式)以及其他存储引擎:
CREATE TABLE copy LIKE original;
ALTER TABLE copy DISABLE KEYS;
INSERT INTO copy SELECT * FROM original;
ALTER TABLE copy ENABLE KEYS;
Run Code Online (Sandbox Code Playgroud)
您希望禁用数据库加载的密钥,然后在最后重新创建密钥.
同样,对于InnoDB:
SET unique_checks=0; SET foreign_key_checks=0;
..insert sql code here..
SET unique_checks=1; SET foreign_key_checks=1;
Run Code Online (Sandbox Code Playgroud)
(正如评论中所指出的那样.)
dna*_*irl 13
从手册:
"CREATE TABLE ... SELECT不会自动为您创建任何索引.这样做是为了使语句尽可能灵活.如果要在创建的表中包含索引,则应在SELECT语句之前指定这些索引:"
CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
Run Code Online (Sandbox Code Playgroud)
您可以与两个指定索引和数据类型(以避免数据类型转换)CREATE TABLE LIKE和CREATE TABLE SELECT.哪一个更快将取决于您的设置.
要使用索引和触发器复制,请执行以下两个查询:
CREATE TABLE newtable LIKE oldtable;
INSERT newtable SELECT * FROM oldtable;
Run Code Online (Sandbox Code Playgroud)
要复制结构和数据,请使用以下方法:
CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
Run Code Online (Sandbox Code Playgroud)
将结构和所有条目从一个表复制到另一个表(通过创建新表)的最佳方法是此查询...
CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;
尝试一下SELECT INTO,并使用一个变量作为中间人。
首先,您必须创建接收表,使其具有与源表相同的结构。
最好的是,它是内部的,所以速度很快。不过,您会丢失索引。