【发布时间】:2021-08-03 11:55:25
【问题描述】:
我有一个主表
id Name Value
2 A 4
4 A 5
6 B 8
8 C 9
和一个历史表,它是主表的副本,但有一个 history_id
history_id id Name Value
1 2 A 4
2 4 A 5
3 6 B 8
4 8 C 9
我想要实现的是将主表的行复制到history_table,每当master_table发生变化时
我正在尝试这样做
INSERT INTO history_table
VALUES ('', SELECT * FROM master_table WHERE `id` = 8)
返回我的错误是两个表中的列都不匹配。如果不是,我希望我能正确尝试,然后请建议任务的最佳方法。
P.S:我不想在查询中提及静态列名和值,因为表中有超过 50 多个字段,并且数据库结构中的任何新更改将来都会使查询失败。
【问题讨论】:
-
简短的回答是你不能。
history_id显然是一个计算列 (可能是 AUTO_INCREMENT) 并且要填充该表,您将 需要 指定您的列重新插入到。即使没有这样的列,您也应该仍然始终指定列名,因为总是可能一个表定义为a, b, c,另一个定义为c, b, a,在这种情况下,指定名称是将数据放在正确位置的唯一方法。这是XY Problem,您甚至不应该尝试这样做。 -
主表中的列id是AUTO_INCREMENT吗?
-
@forpas yes.. master 表中的 id 和 history 表中的 history_id 是 AUTO_INCREMENT 主键
标签: mysql sql sql-insert