【发布时间】:2011-01-21 13:36:32
【问题描述】:
我是 MySQL 新手。我想将一个表的内容复制到同一个数据库中的另一个表。基本上,我想从另一个表插入一个表。有没有简单的方法可以做到这一点?
【问题讨论】:
我是 MySQL 新手。我想将一个表的内容复制到同一个数据库中的另一个表。基本上,我想从另一个表插入一个表。有没有简单的方法可以做到这一点?
【问题讨论】:
这对我有用,
CREATE TABLE newtable LIKE oldtable;
用旧表复制新表
INSERT newtable SELECT * FROM oldtable;
将所有行数据复制到新表中。
【讨论】:
如果您想一次性创建和复制内容,只需使用SELECT:
CREATE TABLE new_tbl SELECT * FROM orig_tbl;
【讨论】:
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 子句中应用条件
【讨论】:
这对我有用。您可以使用 WHERE 和 LIMIT 子句使 SELECT 语句更复杂。
首先复制您的大表(不包含数据),运行以下查询,然后截断较大的表。
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
超级简单。 :-)
【讨论】:
试试这个。在我的 Oracle 10g 中运行良好,
CREATE TABLE new_table
AS (SELECT * FROM old_table);
【讨论】:
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
【讨论】:
如果 table1 很大并且您不想在复制过程中锁定它,您可以改为执行转储和加载:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
【讨论】:
show processlist 时,我看不到任何查询正在运行。不知道是什么问题。
如果表不存在,您可以创建一个具有相同架构的表,如下所示:
CREATE TABLE table2 LIKE table1;
然后,复制数据:
INSERT INTO table2 SELECT * FROM table1
【讨论】:
SELECT * INTO newTable FROM sourceTable,为什么它在MySQL 中不起作用
SELECT ... INTO 用于将表导出到输出文件或变量;不直接放入表中。见dev.mysql.com/doc/refman/5.7/en/select-into.html