PHP MySQL:更新联接表?
对于如何最好地更新联接表,我有点困惑PHP MySQL:更新联接表?,php,mysql,sql,relationship,Php,Mysql,Sql,Relationship,对于如何最好地更新联接表,我有点困惑 Presentaion id PK Asset id PK PresentationAsset presentationid assetid 因此,在PresentationAsset中更新演示文稿及其关联资产时,我是否首先搜索所有关系,删除这些关系,然后创建新关系 解决这种情况的最佳方法是什么?您有两种选择: 1) 删除所有资产并按您所说的那样创建新资产(def更易于编码和调试。如果您在PresentationAsset中没有PK,那么您可能遇到的唯
Presentaion
id PK
Asset
id PK
PresentationAsset
presentationid
assetid
因此,在PresentationAsset中更新演示文稿及其关联资产时,我是否首先搜索所有关系,删除这些关系,然后创建新关系
解决这种情况的最佳方法是什么?您有两种选择:
1) 删除所有资产并按您所说的那样创建新资产(def更易于编码和调试。如果您在PresentationAsset中没有PK,那么您可能遇到的唯一问题是多次删除可能会在PresentationAsset PK上留下大量数据。)
2) 执行此操作(使用伪代码)
- 从当前与演示文稿关联的资产中获取所有ID(旧值)。我将此称为array1
- 对于新值中的每项资产:
- 如果它已经存在,请使用其新值更新它,并从array1中删除其id
- 如果不是,就创建它
- 删除阵列1中PresentationId=currentPresentationId且AssetId为的所有PresentationAsset
DELETE FROM PresentationAsset WHERE presentationid = 1
INSERT INTO PresentationAsset VALUES (1, 1), (1, 2), (1, 3)
假设这些确实是该表中仅有的两列(例如,没有时间戳或任何东西),我无法想象还有什么原因需要将其复杂化
毕竟,清除现有行并插入所有新行的替代方法是保留已经存在的行,但删除不再应该存在的行,然后插入新行。基本上,您仍然会得到至少一个DELETE
和一个INSERT
,因此在大多数实际应用程序中,性能应该不会有太大差异。在第一种方法中,性能甚至可能更好,因为它需要更少的每个操作的值检查
当然,如果您正在处理一个足够大的场景,其中如此微小的性能差异非常重要,那么您可能希望对所有选项进行真正的测试,并自己测量性能
当然,如果表中不是只有这两列,则需要为要更新的行正确保留其他列的值,因此无论如何都不能删除所有列并插入新列。是的,这正是我所想的。搜索现有数据、匹配那些没有变化的数据等等都会非常痛苦。谢谢你的回复。