使用 CREATE TABLE ... LIKE
创建一个基于另一个表的空表,包括原始表中的所有列属性和索引:
CREATE TABLE new_tbl LIKE orig_tbl;
副本使用与原始表相同的表存储格式版本。需要在原始表上拥有 SELECT
权限。
LIKE
只适用于基本表,不适用于视图。
您不能在 LOCK TABLES
语句生效时执行 CREATE TABLE
或 CREATE TABLE ... LIKE
。
CREATE TABLE ... LIKE
执行与 CREATE TABLE
相同的检查。这意味着,如果当前 SQL 模式不同于原始表创建时的模式,表定义可能会被认为无效并导致语句失败。
对于 CREATE TABLE ... LIKE
,目标表保留原始表中的生成列信息。
对于 CREATE TABLE ... LIKE
,目标表保留原始表中的默认表达式值。
对于 CREATE TABLE ... LIKE
,目标表保留原始表中的 CHECK
约束,除了所有约束名称都是生成的。
CREATE TABLE ... LIKE
不保留原始表中的任何 DATA DIRECTORY
或 INDEX 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;
创建表 ... LIKE
操作将所有 ENGINE_ATTRIBUTE
和 SECONDARY_ENGINE_ATTRIBUTE
值应用于新表。