SHOW CREATE TABLE tbl_name
显示CREATE TABLE
创建命名表的语句。要使用此语句,您必须对表具有某些权限。此语句也适用于视图。
mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`id` int NOT NULL AUTO_INCREMENT,
`s` char(60) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
从 MySQL 8.0.16 开始,MySQL 实现了CHECK
约束并SHOW CREATE TABLE
显示它们。所有CHECK
约束都显示为表约束。也就是说,
CHECK
最初指定为列定义一部分的约束显示为单独的子句,而不是列定义的一部分。例子:
mysql> CREATE TABLE t1 (
i1 INT CHECK (i1 <> 0), -- column constraint
i2 INT,
CHECK (i2 > i1), -- table constraint
CHECK (i2 <> 0) NOT ENFORCED -- table constraint, not enforced
);
mysql> SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`i1` int DEFAULT NULL,
`i2` int DEFAULT NULL,
CONSTRAINT `t1_chk_1` CHECK ((`i1` <> 0)),
CONSTRAINT `t1_chk_2` CHECK ((`i2` > `i1`)),
CONSTRAINT `t1_chk_3` CHECK ((`i2` <> 0)) /*!80016 NOT ENFORCED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
SHOW CREATE TABLE
根据
sql_quote_show_create
选项的值引用表名和列名。请参阅第 5.1.8 节,“服务器系统变量”。
当更改表的存储引擎时,不适用于新存储引擎的表选项将保留在表定义中,以便在必要时将表及其先前定义的选项恢复为原始存储引擎。例如,将存储引擎从 更改为 时
InnoDB
,保留MyISAM
特定于 的选项InnoDB
,例如
ROW_FORMAT=COMPACT
,如下所示:
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) ROW_FORMAT=COMPACT ENGINE=InnoDB;
mysql> ALTER TABLE t1 ENGINE=MyISAM;
mysql> SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`c1` int NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
在禁用严格模式的情况下
创建表时
,如果不支持指定的行格式,则使用存储引擎的默认行格式。表的实际行格式在Row_format
列中报告以响应SHOW TABLE
STATUS
。SHOW CREATE
TABLE
显示
CREATE TABLE
语句中指定的行格式。
在 MySQL 8.0.30 及更高版本中,默认SHOW CREATE TABLE
包含表生成的不可见主键的定义,如果它有这样的键。您可以通过设置 使该信息在语句的输出中被抑制
show_gipk_in_create_table_and_information_schema
= OFF
。有关详细信息,请参阅
第 13.1.20.11 节,“生成的不可见主键”。