在MySQL中,如何将一个表的内容复制到同一数据库中的另一个表?


118

我是MySQL的新手。我想将一个表的内容复制到同一数据库中的另一个表。基本上,我想从另一个表插入到一个表中。有没有简单的方法可以做到这一点?

Answers:


184

INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;

编辑:或如果表具有不同的结构,您还可以:

INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;

编辑:限制此。

INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1

如果有人想在运行此查询期间在源表中执行插入操作,该怎么办?是否锁定插入操作?
Lawakush Kurmi

135

如果该表不存在,则可以使用相同的架构创建一个,如下所示:

CREATE TABLE table2 LIKE table1;

然后,要复制数据:

INSERT INTO table2 SELECT * FROM table1

1
SELECT * INTO newTable FROM sourceTablew3school中找到了此代码,为什么它不起作用MySQL
Kasun Siyambalapitiya,2016年

@KasunSiyambalapitiya SELECT ... INTO用于将表导出到输出文件或变量;不能直接插入表格。参见dev.mysql.com/doc/refman/5.7/en/select-into.html
Doktor J

@Kasun Siyambalapitiya,w3school页面用于不同的SQL,不适用于MySQL。w3schools现在有错误报告,如果您发现问题,请在其网站上报告,以帮助获得准确的知识。
Nightwolf

27

如果table1很大,并且您不想在复制过程中锁定它,则可以转储并加载:

CREATE TABLE table2 LIKE table1;

SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;

我尝试使用stackoverflow.com/a/9536680/351903解决方案在RDS上进行转储。文件已创建,但长时间保持0大小。另外,在检查时show processlist,我看不到任何查询在运行。不知道是什么问题。
Sandeepan Nath

15

这对我有用

CREATE TABLE newtable LIKE oldtable;

用旧表复制newtable

INSERT newtable SELECT * FROM oldtable;

将所有行数据复制到新表。

谢谢


10

如果要一次性创建和复制内容,只需使用SELECT:

创建表new_tbl SELECT * FROM orig_tbl;


4
+1-尽管新表从第一个表开始就没有索引定义。“创建...喜欢...”方法也将复制索引定义。
马丁

2

这对我有用。您可以使用WHERE和LIMIT子句使SELECT语句更复杂。

首先复制大表(不包含数据),运行以下查询,然后截断大表。

INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)

超级简单。:-)


0
CREATE TABLE target_table SELECT * FROM source_table;

它只是创建一个与源表具有相同结构的新表,还将所有行从source_table复制到target_table。

CREATE TABLE target_table SELECT * FROM source_table WHERE condition;

如果需要将某些行复制到target_table中,请在where 子句中应用条件


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.