MySQL中有多种方法可以复制表数据,以下是几种常用的方式:
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;
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';
当目标表有唯一键或主键冲突时更新数据:
INSERT INTO 目标表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表
ON DUPLICATE KEY UPDATE 列1 = VALUES(列1), 列2 = VALUES(列2);
REPLACE INTO 目标表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表;
对于大量数据或跨服务器复制:
mysqldump -u 用户名 -p 数据库名 表名 | mysql -u 用户名 -p 目标数据库名
-- 复制表结构但不复制数据
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;
选择哪种方法取决于你的具体需求,如是否需要保留索引、约束,是否需要筛选数据等。