Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL8-SOP

  • MySQL实战45讲学习笔记

    • MySQL45讲学习笔记
    • MySQL基础架构
    • MySQL日志系统 (Redo Log 与 Binlog)
    • MySQL字符串字段索引优化
    • MySQL索引原理与优化
    • MySQL锁机制详解
    • MySQL事务与MVCC机制
    • MySQL普通索引与唯一索引的选择
    • MySQL优化器如何选择索引
    • MySQL抖动刷脏页
    • 表空间管理与回收
    • count函数详解
    • 日志索引
    • orderby工作原理
    • 随机排序实现
    • SQL性能差异函数与转换
    • 慢查询分析锁与版本
    • 幻读与间隙锁
    • 加锁规则分析
    • 应急性能优化方法
    • 数据持久化保证
    • 主备一致性原理
    • 高可用架构与切换
    • 备库延迟分析与优化
    • 主备切换GTID
    • 读写分离实践与问题
    • 数据库健康检查
    • 锁与死锁
    • 数据误删恢复
    • Kill命令详解
    • 查询与内存使用分析
    • Join原理与选择
    • 临时表原理与应用
    • 内部临时表详解
    • Memory引擎详解
    • 自增ID详解
    • Insert加锁分析
    • 表复制方法比较
      • 1. 表复制概述
      • 2. 常见的表复制方法
        • 2.1 CREATE TABLE ... AS SELECT
        • 2.2 CREATE TABLE ... LIKE
        • 2.3 INSERT INTO ... SELECT
        • 2.4 mysqldump工具
        • 2.5 mysqlpump工具
        • 2.6 物理复制(文件级复制)
      • 3. 各种方法对比
      • 4. 选择建议
        • 4.1 快速创建新表
        • 4.2 结构复制
        • 4.3 数据迁移
        • 4.4 备份恢复
        • 4.5 性能要求高的场景
      • 5. 实际应用示例
        • 5.1 创建备份表
        • 5.2 条件性数据复制
        • 5.3 跨数据库复制
      • 6. 注意事项
    • Grant与权限管理
    • 分区表详解
    • SQL语句中的Join问题
    • 自增ID用尽问题
  • 专题系列
  • MySQL实战45讲学习笔记
Carry の Blog
2026-03-04
目录

表复制方法比较

# 表复制方法比较

# 1. 表复制概述

在MySQL中,表复制是指将一个表的数据或结构复制到另一个表的过程。根据需求不同,有多种复制方法可供选择。

# 2. 常见的表复制方法

# 2.1 CREATE TABLE ... AS SELECT

CREATE TABLE new_table AS SELECT * FROM old_table;
1
  • 复制表结构和数据
  • 新表会继承原表的索引和约束
  • 适用于完全复制场景

# 2.2 CREATE TABLE ... LIKE

CREATE TABLE new_table LIKE old_table;
1
  • 只复制表结构,不复制数据
  • 保留原表的所有约束和索引定义
  • 适用于结构复制场景

# 2.3 INSERT INTO ... SELECT

INSERT INTO new_table SELECT * FROM old_table;
1
  • 复制数据到已存在的表中
  • 表必须已经存在
  • 可以添加WHERE条件进行筛选

# 2.4 mysqldump工具

mysqldump -u username -p database_name table_name > backup.sql
1
  • 导出为SQL脚本文件
  • 可以用于跨服务器复制
  • 支持压缩和增量备份

# 2.5 mysqlpump工具

mysqlpump -u username -p database_name table_name > backup.sql
1
  • MySQL 5.7+提供的增强版备份工具
  • 支持并行备份
  • 性能优于mysqldump

# 2.6 物理复制(文件级复制)

  • 直接复制数据文件
  • 需要停止数据库服务
  • 速度最快但风险较高

# 3. 各种方法对比

方法 复制结构 复制数据 适用场景 优点 缺点
CREATE TABLE ... AS SELECT ✓ ✓ 快速创建新表 简单直接 不能指定表名
CREATE TABLE ... LIKE ✓ ✗ 结构复制 保留所有约束 不复制数据
INSERT INTO ... SELECT ✗ ✓ 数据迁移 灵活可控 需要表已存在
mysqldump ✓ ✓ 备份恢复 跨平台兼容 速度较慢
mysqlpump ✓ ✓ 备份恢复 并行处理 仅MySQL 5.7+
物理复制 ✓ ✓ 快速恢复 速度快 风险高

# 4. 选择建议

# 4.1 快速创建新表

推荐使用 CREATE TABLE ... AS SELECT,因为它最简单且能同时复制结构和数据。

# 4.2 结构复制

推荐使用 CREATE TABLE ... LIKE,因为它能完整保留原表的约束和索引。

# 4.3 数据迁移

推荐使用 INSERT INTO ... SELECT,因为可以添加过滤条件,并且可以控制何时进行复制。

# 4.4 备份恢复

推荐使用 mysqldump 或 mysqlpump,因为它们提供了更好的兼容性和功能。

# 4.5 性能要求高的场景

推荐使用物理复制,但需要注意停机时间和数据一致性。

# 5. 实际应用示例

# 5.1 创建备份表

-- 创建带数据的备份表
CREATE TABLE users_backup AS SELECT * FROM users;

-- 创建结构相同的空表
CREATE TABLE users_archive LIKE users;
1
2
3
4
5

# 5.2 条件性数据复制

-- 只复制特定条件的数据
INSERT INTO users_backup 
SELECT * FROM users WHERE created_date >= '2023-01-01';
1
2
3

# 5.3 跨数据库复制

-- 将数据复制到另一个数据库
INSERT INTO other_database.users SELECT * FROM current_database.users;
1
2

# 6. 注意事项

  1. 权限要求:执行复制操作需要相应的数据库权限
  2. 存储空间:复制过程中需要足够的磁盘空间
  3. 锁机制:大量数据复制可能会影响性能
  4. 数据一致性:在复制过程中要注意数据的一致性问题
  5. 字符集:确保源表和目标表的字符集兼容
  6. 索引重建:某些情况下复制后可能需要重新构建索引
上次更新: 3/4/2026

← Insert加锁分析 Grant与权限管理→

最近更新
01
表空间管理与回收
03-04
02
MySQL抖动刷脏页
03-04
03
count函数详解
03-04
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式