行莫
行莫
发布于 2025-07-01 / 21 阅读
0
0

MySQL 复制表结构

当需要创建一张新表,表结构和索引要和已经存在的一张表完全一致的时候可以使用 MySQL 复制表结构语句。

CREATE TABLE table_2 LIKE table_1 

创建一张新表 table_2 ,其结构与表 table_1 完全一致。

包括:

  • 列定义(名称、类型、是否为空、默认值等)

  • 索引(普通索引、唯一索引、主键等)

  • 表选项(如字符集、排序规则、引擎等)

不包括:

  • 数据

  • 触发器

  • 外键约束(除非明确指定)

  • 分区信息(取决于版本和配置)

  • 注释(某些情况下可能丢失)

复制表结构时会被原表加元数据锁(MDL)。

MDL 锁的作用:

  • 防止其他会话对源表进行结构修改(如 ALTER TABLE, DROP TABLE, RENAME TABLE 等操作)。

  • 允许并发的查询和写入操作(如 SELECT, INSERT, UPDATE, DELETE),除非这些操作涉及结构变更。

锁的持续时间:

  • MDL 锁会在 CREATE TABLE ... LIKE 执行完成后自动释放。

因此,虽然 CREATE TABLE ... LIKE 语句不会对表数据加锁,但它会在元数据层面锁定源表,防止结构更改,直到语句完成。

我们对一张 1000w 数据的表进行测试。

耗时 232 毫秒就完成了表结构的复制。


评论