特定索引或组合索引的重复键更新
ON DUPLICATE KEY UPDATE for specific index, or combined indices
我有一个 table,到目前为止,我们已经使用 ON DUPLICATE KEY UPDATE
查询来填充和更新,使用来自初始插入是更新案例的重复索引。
INSERT INTO ship_docs (booking_id, boarding_date, shipping_date, special_number)
VALUES (bookingId, boardingDate, shippingDate, specialNumber)
ON DUPLICATE KEY UPDATE
boarding_date = boardingDate, shipping_date = shippingDate, special_number = specialNumber;
我们现在需要引入一个 UNIQUE
约束来防止 special_number
的重复。此查询将不再按预期运行,因为尽管首先 INSERT
booking_id
作为 FK
对它各自的 table 来说是唯一的,special_number
仍然具有有可能发生碰撞。因为它们是同时插入的,查询现在更新(如果存在)special_number
。有什么理由坚持使用这种方法吗?
我已经将查询拆分为单独的分支,但是否仍然可以只用一个分支来完成工作?我理解 WHERE
子句在这种情况下不存在,而且我无法合理化 IF
语句作为解决方案,因为我不希望查询 UPDATE
使用不正确或重复的值,因为我试图防止在错误的行上更新,以及拒绝的 return 信息,同时仍然能够编辑或更新 special_number
.
这种试图让这种方法不值得的好处,或者应该节省的时间?或者有没有办法指定要使用的 only DUPLICATE KEY
?或者为 booking_id FK
和 special_number UNIQUE
索引引入 'unique pair' 索引的方法?
或者我应该做单独的查询。
我最终选择了 Akina 建议的路线。因为其他建议并不能完全解决我希望解决的问题以及 ODKU 的局限性,所以现在我只是将它分成单独的调用,并且很可能会返回一个存储过程,如果需要。
我有一个 table,到目前为止,我们已经使用 ON DUPLICATE KEY UPDATE
查询来填充和更新,使用来自初始插入是更新案例的重复索引。
INSERT INTO ship_docs (booking_id, boarding_date, shipping_date, special_number)
VALUES (bookingId, boardingDate, shippingDate, specialNumber)
ON DUPLICATE KEY UPDATE
boarding_date = boardingDate, shipping_date = shippingDate, special_number = specialNumber;
我们现在需要引入一个 UNIQUE
约束来防止 special_number
的重复。此查询将不再按预期运行,因为尽管首先 INSERT
booking_id
作为 FK
对它各自的 table 来说是唯一的,special_number
仍然具有有可能发生碰撞。因为它们是同时插入的,查询现在更新(如果存在)special_number
。有什么理由坚持使用这种方法吗?
我已经将查询拆分为单独的分支,但是否仍然可以只用一个分支来完成工作?我理解 WHERE
子句在这种情况下不存在,而且我无法合理化 IF
语句作为解决方案,因为我不希望查询 UPDATE
使用不正确或重复的值,因为我试图防止在错误的行上更新,以及拒绝的 return 信息,同时仍然能够编辑或更新 special_number
.
这种试图让这种方法不值得的好处,或者应该节省的时间?或者有没有办法指定要使用的 only DUPLICATE KEY
?或者为 booking_id FK
和 special_number UNIQUE
索引引入 'unique pair' 索引的方法?
或者我应该做单独的查询。
我最终选择了 Akina 建议的路线。因为其他建议并不能完全解决我希望解决的问题以及 ODKU 的局限性,所以现在我只是将它分成单独的调用,并且很可能会返回一个存储过程,如果需要。