如何快速复制数据表的结构_仅复制表结构而不包含数据的可视化操作

秋浩酱_3556

秋浩酱_3556

2026-05-26

694人浏览

原创

create table ... like 是最快复制表结构的方式,可继承列定义、索引、主键、自增及分区(mysql 8.0+),但不复制外键、触发器、注释和函数默认值。

mysql 用 create table ... like 最快

想只复制表结构不带数据,create table new_table like old_table 是最直接的方式。它会完整继承原表的列定义、索引、主键、自增属性,甚至分区信息(mysql 8.0+),但不复制外键、触发器、注释和默认值表达式(如 current_timestamp)。

常见错误是误写成 CREATE TABLE new_table AS SELECT * FROM old_table LIMIT 0 —— 这确实没数据,但会丢掉索引、主键、自增、NOT NULL 约束,只留下列名和类型。

  • LIKE 不复制外键:需手动用 SHOW CREATE TABLE 查原表外键语句,再执行 ALTER TABLE ... ADD CONSTRAINT
  • 默认值若为函数(如 DEFAULT CURRENT_TIMESTAMP),LIKE 后会变成字面值 CURRENT_TIMESTAMP,部分 MySQL 版本可能报错,建议检查 SHOW CREATE TABLE new_table
  • 如果原表有全文索引或空间索引,LIKE 能保留,但目标库要支持对应存储引擎(如 MyISAM 支持全文索引,InnoDB 从 5.6+ 才支持)

PostgreSQL 用 CREATE TABLE ... (LIKE ...) 并注意选项

PostgreSQL 的 LIKE 是子句而非关键字,必须加括号且显式指定继承哪些特性:CREATE TABLE new_table (LIKE old_table INCLUDING ALL)。不写 INCLUDING 默认只复制列定义,连主键和索引都不带。

容易踩的坑是漏掉 INCLUDING 选项,结果建出来一个空壳表——没约束、没索引、没默认值、没注释。

  • INCLUDING ALL 包含:约束、索引、默认值、存储参数、注释、标识列(identity columns)
  • 不包含:外键引用关系(即新表不会成为其他表外键的目标)、序列所有权(identity 列关联的序列仍指向原表,需手动 ALTER SEQUENCE ... OWNED BY)
  • 如果原表有生成列(generated columns),INCLUDING ALL 会复制,但 PostgreSQL 12+ 才支持,低版本会报错

可视化工具里「结构复制」常被当成「导出再导入」

很多 GUI 工具(如 DBeaver、Navicat、MySQL Workbench)点“复制表”时,默认行为其实是导出 CREATE TABLE 语句再执行——这看似没问题,但实际依赖工具对原表元数据的解析精度。比如 MySQL 中的 ENUM 或 SET 值顺序、字符集/排序规则嵌套层级、隐藏系统列(如 ROWID 模拟字段),GUI 工具可能简化或丢失。

典型现象:复制后执行 SHOW CREATE TABLE 对比,发现 COLLATE 少了、ENUM 值大小写变了、TINYINT(1) 变成了 BOOLEAN 别名。

  • 优先在工具里找明确标注 “Structure only” 或 “Schema only” 的导出选项,而不是“复制表”右键菜单
  • 导出的 SQL 文件务必打开检查:确认 ENGINE=、CHARSET=、COLLATE= 是否与原表一致
  • 涉及 JSON 列或虚拟列时,某些旧版工具不识别语法,会直接跳过或报错,此时必须切回命令行用原生 LIKE

SQL Server 用 SELECT INTO 不行,得靠 CREATE TABLE + sys.columns

SQL Server 没有等价于 LIKE 的语法,SELECT * INTO new_table FROM old_table WHERE 1=0 看似可行,但它会忽略主键、索引、约束、默认约束、计算列定义,只保留列名和类型(还可能把 datetime2 强制转成 datetime)。

真正可靠的做法是查系统视图生成建表语句。核心是读 sys.columns、sys.types、sys.indexes,拼出完整 DDL。但手动写太重,推荐用 SSMS 的“生成脚本”功能:右键表 → Tasks → Generate Scripts → 选中表 → 设置“Script Data = False”,再勾选“Script Indexes”、“Script Primary Keys”等。

  • SSMS 脚本向导里容易漏掉“Check for object existence”和“Script USE DATABASE”,导致生成的 SQL 在目标库执行失败
  • 如果原表有计算列或筛选索引(filtered index),默认不包含,需在高级选项里手动开启
  • 复制到不同 SQL Server 版本时(如从 2019 到 2016),某些语法(如 STRING_AGG 作为默认值)会不兼容,得人工降级

事情说清了就结束。最省事的永远是原生 LIKE,但得清楚它到底“像”到哪一步;可视化工具省眼不省心,关键字段一定得肉眼核对 SHOW CREATE TABLE 或 sp_help 输出。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4283

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

911

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1109

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6201

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3043

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6180

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8361

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1130

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

992

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习