在 MySQL 中如何快速的去复制一张表,包括表结构和数据?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
一、MySQL 复制表(结构+数据)的 4 种核心方法 方法 1:CREATE TABLE ... SELECT ...(最简全量复制) 语法:CREATE TABLE 新表名 SELECT * FROM 原表名 [WHERE 条件]; 原理:一次性创建表结构并插入数据,底层通过全表扫描读取原表数据,直接写入新表。 适用场景:快速复制小表、无需完整保留约束(如主键、外键)的场景。 方法 2:CREATE TABLE ... LIKE ... + INSERT INTO ... SELECT ...(完整结构复制) 语法: 复制结构:CREATE TABLE 新表名 LIKE 原表名; 复制数据:INSERT INTO 新表名 SELECT * FROM 原表名 [WHERE 条件]; 原理:分两步执行,先通过 LIKE 完整复制原表结构(含主键、索引、约束、自增属性),再通过 INSERT SELECT 批量插入数据。 适用场景:需保留完整表结构(面试高频场景)、中大型表复制(可拆分数据插入)。 方法 3:mysqldump 工具(跨实例/大数据量复制) 语法:
原理:通过 MySQL 官方工具导出 SQL 脚本(含 CREATE TABLE 和 INSERT 语句),再导入目标库执行。 适用场景:跨数据库实例复制、超大表(1000万+行)、需备份历史数据的场景。 方法 4:物理文件复制(超大表极致效率) 适用前提:同版本 MySQL、相同存储引擎(如 InnoDB)、目标库无同名表。 操作步骤: 停止 MySQL 服务(避免数据不一致); 复制原表的物理文件:InnoDB 复制 ibd(数据文件)和 frm(表结构文件),MyISAM 复制 MYD(数据文件)、MYI(索引文件)、frm; 将文件粘贴到目标库的数据目录(如 /var/lib/mysql/目标库名/); 重启 MySQL,执行 ALTER TABLE 新表名 DISCARD TABLESPACE; + ALTER TABLE 新表名 IMPORT TABLESPACE;(InnoDB 需同步表空间)。 原理:直接复制底层数据文件,跳过 SQL 解析和数据转换,效率最高。 二、总结(核心对比+选择逻辑) ![]() 结论:优先选「方法 2」(完整结构+灵活)或「方法 3」(跨实例+大数据量);超大表选「方法 4」;测试场景选「方法 1」。 该文章在 2025/12/4 15:43:19 编辑过 |
关键字查询
相关文章
正在查询... |