在MySQL中创建与另一个表匹配的表?

97

我正在使用MySQL。我有一张名为EMP的表,现在我需要创建另外一张(EMP_TWO)与原先表相同架构、相同列和相同约束的表。我该如何实现呢?


1
你尝试过使用phpMyAdmin之类的工具导出结构,然后只更改表名吗? - jprofitt
6个回答

203

若要基于另一个表的结构/约束创建新表,请使用:

CREATE TABLE new_table LIKE old_table;     

如果需要复制数据,请使用以下命令:

INSERT INTO new_table SELECT * FROM old_table;  

创建表文档

注意 LIKE 选项的说明:

使用 LIKE 可以基于另一个表的定义(包括原表中定义的任何列属性和索引)创建一个空表:

CREATE TABLE new_table LIKE original_table; 使用与原始表相同的版本的表存储格式创建副本。需要对原表有 SELECT 权限。

LIKE 仅适用于基本表,不能用于视图。

CREATE TABLE ... LIKE 不会保留为原始表指定的任何 DATA DIRECTORY 或 INDEX DIRECTORY 表选项,也不会保留任何外键定义。


6
多年来一直使用MySQL,完全不知道在CREATE语句中可以使用LIKE - jprofitt
@jprofitt 我只知道因为我前几天想在生产服务器上测试一个重要查询,所以这很有用! - Manse
@ManseUK 如果我想从一个数据库复制一张表并重新创建到另一个数据库,该怎么办? - Yaje
太棒了!谢谢……确实非常有用! - Hassantm
如果有人需要在另一个数据库中使用相同的表结构,你只需要执行 CREATE TABLE new_db.new_table LIKE old_db.old_table 就可以啦 :) - Jimmy Adaro

20

如果您只想复制结构,请使用

create table new_tbl like old_tbl;

如果您希望复制结构和数据,请使用

create table new_tbl select * from old_tbl;

9
在MySQL中创建一个与另一个表匹配的表? 答案:
CREATE TABLE new_table AS SELECT * FROM old_table;

4
为什么不这样去?
CREATE TABLE new_table LIKE Select * from Old_Table;   

或者,您可以通过像这样过滤数据来进行筛选。
CREATE TABLE new_table LIKE Select column1, column2, column3 from Old_Table where column1 = Value1;   

如果您的新表中需要相同的约束条件,首先必须创建模式,然后再进行模式数据的创建。

CREATE TABLE new_table LIKE Some_other_Table;

1
在一个语句中同时使用likeselect *是否可能?我收到了错误。另请检查此答案https://dev59.com/FGkw5IYBdhLWcg3wGGm8 - chanchal118
我不确定mysql。 - Trikaldarshiii
类似的功能在SQL Server中也是可用的:select * into <NewTableName> from <OldTableName>; - Trikaldarshiii

0

仅使用MySQL命令行8.0上述命令时,会显示以下错误:

ERROR 1327 (42000): Undeclared variable: at

因此,如果只想复制具有相同结构但不包含数据的表,则可以使用以下create table with like语句:

create table EMP_TWO like EMP;

如果想要复制表及其数据,请使用以下语句:

create table EMP_TWO select * from EMP;

如果只想复制表中的数据,请在创建空表后使用以下语句:

insert into EMP_TWO select * from EMP;


0
SHOW CREATE TABLE tablename

提供了可以重新创建包括索引等内容的 SQL 语句 - 只需将名称更改为您想要的新表名即可 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接