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

xriantvc  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(258)

我有一个表,它是作为select*从一个视图创建的(然后添加了一个pk)。
我想用视图中的所有数据定期更新表。
我认为最好的选择是使用: INSERT INTO table_a SELECT * FROM view_a ON DUPLICATE KEY UPDATE 值(非键列1),值(非键列1);
因为有相当多的列,而且它们在将来可能会更改(然后我可以重新创建表,但是我希望我不必编辑定期插入,我想知道是否有一种方法可以避免显式指定所有列?

nmpmafwu

nmpmafwu1#

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

5uzkadbs

5uzkadbs2#

不幸的是,mysql中没有这样的语法。你必须逐个更新所有列。

mefy6pfw

mefy6pfw3#

我能想到的一件事是从 INFORMATION_SCHEMA.COLUMNS 并使用它们在应用程序中动态组合查询。

SELECT * FROM information_schema.columns WHERE table_name = 'view_a';

现在,无论视图是否更改,您都有了列。
对表执行相同的操作,就会得到列差异。使用这些差异来运行altertable语句,或者删除它并一起重新创建它。
当然,这可能比手动删除和重新创建表更费力。

相关问题