在重复键更新时,用于特定索引或组合索引



我有一个表,到目前为止,我们一直在使用ON DUPLICATE KEY UPDATE查询来填充和更新,初始插入的外键(booking_id(是更新案例的重复索引。

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作为FKbooking_id对于其各自的表是唯一的,special_number仍然具有冲突的可能性。由于它们是同时插入的,因此查询现在会在(如果存在(special_number上更新。有什么理由坚持这种方法吗?

我已经将查询拆分为单独的分支,但是仍然可能仅使用一个分支即可完成工作吗?我理解在这种情况下不存在WHERE子句,并且我无法将IF语句合理化为解决方案,因为我不希望查询使用不正确或重复的值UPDATE,因为我试图防止更新错误的行,并返回拒绝的信息, 同时仍然能够编辑或更新special_number.

这种保留这种方法的尝试是否不值得受益,或者应该节省时间?或者有没有办法指定唯一要使用的DUPLICATE KEY?或者为booking_id FKspecial_number UNIQUE指数的结合引入"唯一对"指数的方法?

或者我应该只是做单独的查询。

我最终还是按照Akina建议的路线走了。因为其他建议并不能完全解决我希望解决的问题以及 ODKU 的局限性,所以现在我只是将其拆分为单独的调用,如果需要,很可能会使用存储过程返回。

最新更新