我想将一个mysql表的结构和内容复制到另一个,将该表的所有列和值添加到另一个表中已存在的列。
我可以手动完成,但由于我说的是大量的列,如果有某种ALTER语句可以帮助我这样做,那就太棒了。
修改
更好地解释自己:
我首先需要将表B中包含的列(column_name,data_type)添加到表A(已经有自己的列集)。完成后,我可以复制内容,这很容易。
我想真正的问题是:有没有办法将表B中包含的列添加到另一个具有自己列的表中(表A)?
答案 0 :(得分:1)
这会将源表中的所有数据复制到目标表。您可以指定哪些列应该指向哪些列。通过更改targetColumn ..和sourceColumn ....
的名称INSERT INTO targetTable (
targetColumn1
targetColumn1
targetColumn1
....
targetColumnN
)
SELECT
sourceColumn1
sourceColumn1
sourceColumn1
....
sourceColumnN
FROM sourceTable
您也可以通过
创建sourceTableCREATE TABLE targetTable LIKE sourceTable
编辑将所有数据从sourceTable拉到targetTable的方法,但是如果存在则删除targetTable
DROP TABLE IF EXISTS targetTable;
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
编辑如果您需要保留旧数据,则可能需要重新映射它,但您可以在其他表中合并
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
INSERT INTO targetTable ( fieldsToInsertTo ) SELECT fieldsToSelectFrom FROM oldTargetTable ON DUPLICATE KEY ......;
DROP TABLE IF EXISTS oldTargetTable;
RENAME TABLE targetTable TO oldTargetTable;
然而,这可能需要ON DUPLICATE KEY UPDATE .....逻辑,或者如果您乐意丢弃任何PRIMARY / UNIQUE键冲突的行,则只需要在第二个INSERT IGNORE。这假设您要使用oldTargetTable中的数据进行复制和合并的sourceTable。表targetTable只是一个临时名称。
如果您想要从旧表中选择数据,那么只需交换您执行INSERT的订单
答案 1 :(得分:1)
基于flavianatill的第二个解决方案,在我看来,不需要导出/导入步骤。如果我正确理解了问题,下面的单行应该这样做。
CREATE TABLE IF NOT EXISTS merged_table AS (SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id);
对不起,我会把它放在评论中,但我缺乏声誉!