優先順位列を持つ「タスク」テーブルがありますが、これには一意の制約があります。
2行の優先度の値を入れ替えようとしていますが、制約に違反し続けています。私はこの声明を同様の状況のどこかで見ましたが、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