【发布时间】:2014-11-21 10:55:23
【问题描述】:
我需要更新 mySQL 数据库中的一行,但在存在约束时无法执行此操作。
约束要求两列的组合是唯一的。
例如,名字和姓氏字段需要是唯一的。 SHOW CREATE TABLE 用户可能包含如下内容:
UNIQUE KEY `uniquePortTermCode` (`firstname`,`lastname`)
当我尝试更新时,我违反了这个密钥,所以我得到了错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Bob-Smith' for key 'uniqueFirstnameLastname'
假设我需要交换两个具有相同姓氏的用户的名称。所以我想将 Bob Smith 设置为 Jim Smith,我想将 Jim Smith 设置为 Bob Smith。当我尝试第一个更新语句时,我会遇到唯一键错误。
我认为解决方法是SET foreign_key_checks=0,但由于变量表明这仅适用于外键,而不是唯一键,所以我仍然得到错误。
我还看到 mySQL unique_checks 中有一个变量,但是将其设置为 false 仍然不能解决我的问题,我仍然得到错误。
有没有办法在执行此操作时忽略唯一键,而无需像滑动拼图一样更改周围的数据?
【问题讨论】:
-
SET foreign_key_checks=0 不会忽略唯一字段。你用的是什么数据库引擎? myISAM 还是 InnoDB?你试过 UNIQUE_CHECKS=0;禁用键?
-
是的,这实际上是重复的。我会关闭它。
标签: mysql sql-update unique-key