MySql-如何在不显式指定所有非键列的情况下插入和重复键更新

时间:2018-07-11 09:15:47

标签: mysql

我有一个从视图中作为选择*创建的表(然后添加了PK)。

我想用视图中的所有数据定期更新表。

我认为最好的选择是使用:INSERT INTO table_a SELECT * FROM view_a ON DUPLICATE KEY UPDATE VALUES(non_key_col_1),VALUES(non_key_col_1),....;

由于有很多列,并且将来它们可能会更改(然后我可以重新创建表,但是我希望不必编辑定期插入,所以我想知道是否有一个避免明确指定所有列的方法?

3 个答案:

答案 0 :(得分:0)

不幸的是,中没有这样的语法。您必须一一更新所有列。

答案 1 :(得分:0)

您可以在插入操作时使用触发器,即如果主键存在,请更新该行,否则将其插入。但肯定会影响大数据情况下的性能

答案 2 :(得分:0)

我能想到的一件事是从GetMessageTime获取列名,并使用它们来在应用程序中动态组成查询。

INFORMATION_SCHEMA.COLUMNS

现在,无论视图是否更改,都具有列。

对表执行相同操作,但列有所不同。 使用这些差异来运行ALTER TABLE语句或将其删除并重新创建它们。

当然,与手动删除并重新创建表相比,这可能更加费力。