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。
我有师父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
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。