当需要创建一张新表,表结构和索引要和已经存在的一张表完全一致的时候可以使用 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 毫秒就完成了表结构的复制。