У меня есть следующая таблица с уникальным индексом по полю "position_in_list":
CREATE TABLE `planned_operation` (
`id` bigint(20) NOT NULL,
`position_in_list` bigint(20) NOT NULL,
`name` varchar(255) not null
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `planned_operation`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `position_in_list` (`position_in_list`);
ALTER TABLE `planned_operation`
MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
INSERT INTO `planned_operation` (`id`, `position_in_list`, `name`) VALUES
(1, 1, 'first'),
(2, 2, 'second');
Тогда у меня тривиальная задача, это изменение позиции при обновлении списка. Соответственно, вам необходимо обновить список элементов, перед которыми была вставлена запись. Чтобы не выполнять тысячи обновлений, я выполняю один запрос:
update planned_operation
set position_in_list = case position_in_list
when 2 then 3
when 1 then 2
end
where position_in_list in (1, 2)
Но при выполнении выдается ошибка:
#1062 - Duplicate entry '1' for key 'position_in_list'
Есть ли способ избежать ошибки? Без отключения уникального индекса