我有一个从视图中作为选择*创建的表(然后添加了PK)。
我想用视图中的所有数据定期更新表。
我认为最好的选择是使用:INSERT INTO table_a SELECT * FROM view_a ON DUPLICATE KEY UPDATE
VALUES(non_key_col_1),VALUES(non_key_col_1),....;
由于有很多列,并且将来它们可能会更改(然后我可以重新创建表,但是我希望不必编辑定期插入,所以我想知道是否有一个避免明确指定所有列的方法?
答案 0 :(得分:0)
不幸的是,mysql中没有这样的语法。您必须一一更新所有列。
答案 1 :(得分:0)
您可以在插入操作时使用触发器,即如果主键存在,请更新该行,否则将其插入。但肯定会影响大数据情况下的性能
答案 2 :(得分:0)
我能想到的一件事是从GetMessageTime
获取列名,并使用它们来在应用程序中动态组成查询。
INFORMATION_SCHEMA.COLUMNS
现在,无论视图是否更改,都具有列。
对表执行相同操作,但列有所不同。 使用这些差异来运行ALTER TABLE语句或将其删除并重新创建它们。
当然,与手动删除并重新创建表相比,这可能更加费力。