特定索引或组合索引的重复键更新

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 FKspecial_number UNIQUE 索引引入 'unique pair' 索引的方法?

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

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