我有一个表,到目前为止,我们一直在使用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
作为FK
的booking_id
对于其各自的表是唯一的,special_number
仍然具有冲突的可能性。由于它们是同时插入的,因此查询现在会在(如果存在(special_number
上更新。有什么理由坚持这种方法吗?
我已经将查询拆分为单独的分支,但是仍然可能仅使用一个分支即可完成工作吗?我理解在这种情况下不存在WHERE
子句,并且我无法将IF
语句合理化为解决方案,因为我不希望查询使用不正确或重复的值UPDATE
,因为我试图防止更新错误的行,并返回拒绝的信息, 同时仍然能够编辑或更新special_number
.
这种保留这种方法的尝试是否不值得受益,或者应该节省时间?或者有没有办法指定唯一要使用的DUPLICATE KEY
?或者为booking_id FK
和special_number UNIQUE
指数的结合引入"唯一对"指数的方法?
或者我应该只是做单独的查询。
我最终还是按照Akina建议的路线走了。因为其他建议并不能完全解决我希望解决的问题以及 ODKU 的局限性,所以现在我只是将其拆分为单独的调用,如果需要,很可能会使用存储过程返回。