关于如何最好地更新联接表,我有些困惑。

Presentaion
id PK

Asset
id PK

PresentationAsset
presentationid
assetid


因此,当更新Presentation及其在PresentationAsset中的关联资产时,我是否首先搜索所有关系,将其删除,然后创建新的关系?

对于这种情况,最好的方法是什么?

最佳答案

至少将它们全部删除并创建新的至少是最简单的方法。毕竟,只有两个查询。

DELETE FROM PresentationAsset WHERE presentationid = 1
INSERT INTO PresentationAsset VALUES (1, 1), (1, 2), (1, 3)


假设这些确实是该表中仅有的两列(例如,没有时间戳或任何东西),我无法想象您需要将其复杂化的任何原因。

毕竟,擦除现有行并插入所有新行的替代方法是保留已经存在的行,但删除不再需要的行,然后插入新行。从本质上讲,您仍然至少要得到一个DELETE和一个INSERT,因此在大多数实际应用程序中,性能应该不会有太大差异。在第一种方法中,性能甚至可能更好,因为它每次操作所需的价值检查更少。

当然,如果您要处理的情况足够大,那么微小的性能差异就很重要,那么您可能希望对所有选项进行真实测试并自己衡量性能。

而且,当然,如果这些不是表中仅有的两列,则需要为要更新的行正确保留其他列的值,因此删除全部并插入new不会成为一种选择无论如何。

10-06 01:39