【发布时间】:2020-08-30 07:27:10
【问题描述】:
如何在mysql中更新唯一索引而不出现重复条目错误?
如果没有重复值,我想更新它,并且在重复条目的情况下什么都不做,更新行都不会出错。
我发现 ON DUPLICATE KEY 在更新查询中不起作用。
【问题讨论】:
如何在mysql中更新唯一索引而不出现重复条目错误?
如果没有重复值,我想更新它,并且在重复条目的情况下什么都不做,更新行都不会出错。
我发现 ON DUPLICATE KEY 在更新查询中不起作用。
【问题讨论】:
使用update ignore ... 语句而不是简单的update ...,请注意副作用(下面引用的最后一句)。正如update syntax 上的 mysql 手册所说:
使用 IGNORE 修饰符,即使更新期间发生错误,更新语句也不会中止。不会更新在唯一键值上发生重复键冲突的行。更新为会导致数据转换错误的值的行将更新为最接近的有效值。
如果您不能接受副作用,那么您需要在更新前检查重复值,然后使用 select ... for update 语句锁定要更新的记录。第三种选择是在应用程序对该语句的错误处理中忽略重复的键错误。老实说,我会选择最后一种解决方案。
【讨论】: