我有一个带有优先级列的“任务”表,它有一个唯一的约束。
我试图交换两行的优先级值,但我一直违反约束。我在类似情况的某处看到了这个声明,但不是在 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