我有一个“任务”表,其中有一个优先级列,该列具有唯一约束。
我正在尝试交换两行的优先级值,但我一直违反约束。我在类似情况下的某个地方看到过这个语句,但它不是使用MySQL。
UPDATE tasks
SET priority =
CASE
WHEN priority=2 THEN 3
WHEN priority=3 THEN 2
END
WHERE priority IN (2,3);
这将导致错误:
Error Code: 1062. Duplicate entry '3' for key 'priority_UNIQUE'
在MySQL中是否有可能不使用虚假值和多个查询来完成这个任务?
编辑:
以下是表结构:
CREATE TABLE `tasks` (
`id` int(11) NOT NULL,
`name` varchar(200) DEFAULT NULL,
`priority` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `priority_UNIQUE` (`priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8