Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.1 数据定义语句  / 13.1.20 CREATE TABLE 语句  /  13.1.20.3 CREATE TABLE ... LIKE 语句

13.1.20.3 CREATE TABLE ... LIKE 语句

用于CREATE TABLE ... LIKE根据另一个表的定义创建一个空表,包括原始表中定义的任何列属性和索引:

CREATE TABLE new_tbl LIKE orig_tbl;

副本是使用与原始表相同版本的表存储格式创建的。SELECT原始表需要 该 权限。

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

重要的

您不能执行CREATE TABLEor CREATE TABLE ... LIKEwhile LOCK TABLES语句生效。

CREATE TABLE ... LIKE进行与 相同的检查 CREATE TABLE。这意味着如果当前 SQL 模式与创建原始表时有效的模式不同,则表定义可能被认为对新模式无效并导致语句失败。

对于CREATE TABLE ... LIKE,目标表保留从原始表生成的列信息。

对于CREATE TABLE ... LIKE,目标表保留原始表中的表达式默认值。

对于CREATE TABLE ... LIKE,目标表保留CHECK来自原始表的约束,除了生成所有约束名称。

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

如果原表是TEMPORARY表, CREATE TABLE ... LIKE则不保留 TEMPORARY。要创建 TEMPORARY目标表,请使用 CREATE TEMPORARY TABLE ... LIKE.

mysql表空间、 InnoDB系统表空间 ( innodb_system) 或通用表空间中创建的表TABLESPACE在表定义中包含一个属性,该属性定义表所在的表空间。由于临时回归,CREATE TABLE ... LIKE保留TABLESPACE 属性并在定义的表空间中创建表,而不管 innodb_file_per_table设置如何。要在基于此类表的定义创建空表时避免该TABLESPACE属性,请改用以下语法:

CREATE TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;

CREATE TABLE ... LIKE操作将所有 ENGINE_ATTRIBUTESECONDARY_ENGINE_ATTRIBUTE值应用于新表。