插件窝 干货文章 mysql怎么复制表数据

mysql怎么复制表数据

table 数据 SELECT 复制 997    来源:    2025-03-29

MySQL 复制表数据的方法

MySQL中有多种方法可以复制表数据,以下是几种常用的方式:

1. 使用 INSERT INTO SELECT 语句

INSERT INTO 目标表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表
[WHERE 条件];

示例:

-- 复制所有数据到新表
INSERT INTO new_table SELECT * FROM old_table;

-- 复制部分列和筛选数据
INSERT INTO new_table (id, name, email)
SELECT id, name, email FROM old_table WHERE active = 1;

2. 使用 CREATE TABLE AS SELECT (CTAS)

CREATE TABLE 新表 AS
SELECT * FROM 源表
[WHERE 条件];

示例:

-- 创建新表并复制所有数据
CREATE TABLE new_table AS SELECT * FROM old_table;

-- 创建新表并复制部分数据
CREATE TABLE active_users AS 
SELECT * FROM users WHERE status = 'active';

3. 使用 INSERT INTO ... ON DUPLICATE KEY UPDATE

当目标表有唯一键或主键冲突时更新数据:

INSERT INTO 目标表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表
ON DUPLICATE KEY UPDATE 列1 = VALUES(列1), 列2 = VALUES(列2);

4. 使用 REPLACE INTO 语句

REPLACE INTO 目标表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表;

5. 使用 mysqldump 工具

对于大量数据或跨服务器复制:

mysqldump -u 用户名 -p 数据库名 表名 | mysql -u 用户名 -p 目标数据库名

注意事项

  1. 确保目标表已存在且结构与源表兼容(除非使用 CREATE TABLE AS SELECT)
  2. 复制大量数据时考虑分批处理以避免锁表
  3. 如果目标表有自增主键,注意处理主键冲突
  4. 考虑使用事务保证数据一致性

高级选项

-- 复制表结构但不复制数据
CREATE TABLE new_table LIKE old_table;

-- 然后复制数据
INSERT INTO new_table SELECT * FROM old_table;

-- 跨数据库复制
INSERT INTO database1.new_table 
SELECT * FROM database2.old_table;

选择哪种方法取决于你的具体需求,如是否需要保留索引、约束,是否需要筛选数据等。