在mysql中,如果我们想基于一张已经存在的表来创建一张新表,并且只保留原有的表结构而不复制任何数据,最方便的做法就是使用create table like语句。这种方式会按照源表的定义生成一张结构完全一致的新表。

一、create table like基本语法
mysql中复制表结构的核心语法非常简单,格式如下:
-- 复制 existing_table 的表结构到 new_table CREATE TABLE new_table LIKE existing_table;
执行后,new_table 会拥有和 existing_table 相同的列定义、数据类型、默认值、自增属性、索引以及存储引擎等,但里面没有任何记录。
二、与create table select的区别
很多初学者容易混淆下面两种写法:
- CREATE TABLE LIKE:完整复制表结构,包括索引、约束、自增,但不复制数据。
- CREATE TABLE AS SELECT:根据查询结果创建表,只复制查询出的列和数据,原表的索引和自增属性会丢失。
示例对比:
-- 方式一:仅复制结构 CREATE TABLE user_bak LIKE user; -- 方式二:复制结构和数据,但丢失索引与自增 CREATE TABLE user_copy AS SELECT * FROM user;
三、复制后哪些结构会被保留
使用create table like时,以下对象一般会被一起复制:
| 结构元素 | 是否复制 |
|---|---|
| 列类型与顺序 | 是 |
| NOT NULL约束 | 是 |
| 默认值 | 是 |
| 自增属性AUTO_INCREMENT | 是 |
| 主键与索引 | 是 |
| 表注释 | 否(部分版本不复制) |
四、跨库复制表结构
如果源表和目标表不在同一个数据库,可以带上库名:
-- 从 db1 复制结构到 db2 CREATE TABLE db2.new_table LIKE db1.old_table;
五、验证复制结果
创建完成后,可以通过查看建表语句确认结构是否一致:
SHOW CREATE TABLE new_table;
注意:create table like不会复制源表里的数据行,也不会复制外键约束定义以外的触发器,如果业务依赖触发器需要单独处理。
六、常见使用场景
在实际项目中,这种操作常用于:
- 为线上表建立结构相同的备份表,便于后续手动同步或归档。
- 在测试环境快速克隆生产表结构做功能验证。
- 按时间分表时,用模板表批量生成相同结构的月表或日表。
只要记住 mysql 的 create table like 是专门用来复制表结构而非数据的命令,就能在需要建相似表时少写很多重复的字段定义,也降低出错概率。
mysqlcreate_table_like复制表结构修改时间:2026-07-31 00:00:23