mysql 将完整的行数据从一个 table 复制到另一个具有不同字段的数据

mysql copy complete row data from one table to another with different fields

我有师父table

id       Name       Value
2          A          4
4          A          5
6          B          8
8          C          9

和历史记录 table,它是主 table 的副本,但具有 history_id

history_id   id       Name       Value
    1        2          A          4
    2        4          A          5
    3        6          B          8
    4        8          C          9

我想要实现的是,每当 master_table

发生变化时,将 master table 的行复制到 history_table

我正在尝试这样做

INSERT INTO history_table
VALUES ('', SELECT * FROM master_table WHERE `id` = 8)

返回我的错误是 table 中的列不匹配。我希望我尝试正确,如果没有,请提出完成该任务的最佳方法。

P.S:我不想在查询中提及静态的列名称和值,因为 table 中有超过 50 个字段,并且数据库结构中的任何新更改都将失败将来的查询。

您应该列出要插入的列并使用 insert . . . select:

INSERT INTO history_table (id, name, value)
    SELECT id, name, value
    FROM master_table
    WHERE `id` = 8;

这假定 history_id 是自动设置的(自动递增)。

您的问题涉及价值观的变化。但是,这与您指定的错误无关。如果您对检测变化有进一步的疑问,请提出 问题并提供适当的示例数据、所需结果和解释。

您应该使用 INSERT ... SELECT 而不是 INSERT ... VALUES 并为 history_id 传递 NULL:

INSERT INTO history_table
SELECT null, m.* 
FROM master_table m
WHERE m.id = 8;

参见demo