Три метода - предпочтителен метод 1:
1) Циклически перебирайте каждую запись и убирайте 1 из этого значения записи, начиная с самого низкого и заканчивая повышением.
UPDATE `entityfeedhot` SET `idx` = `idx` - 1 WHERE `idx` > 1 AND `idx` < 9 ORDER BY `idx` ASC
Предложение ORDER BY
важно, поскольку оно гарантирует, что строки обрабатываются в порядке возрастания, чтобы избежать дублирования результатов.idx = 1
не должно существовать.
2) Создайте новый столбец, такой как idx_two
, и установите значение этого столбца равным idx - 1. Это отменяет уникальный статус индекса (потому что это новый столбец).).
ALTER TABLE `entityfeedhot` ADD `new_dx` INT(10) NOT NULL DEFAULT '0' AFTER `idx`;
Затем заполните столбец:
UPDATE `entityfeedhot` SET `new_dx` = CASE
WHEN `idx` > 1 AND `idx` < 9 THEN `idx` = `idx` - 1
ELSE `idx`
Приведенный выше запрос будет заполнен idx - 1 , где условие WHEN
истинно , иначе это будетпросто скопируйте значение.Все строки будут обновлены.
Затем удалите столбец idx и переименуйте новый столбец.Индексы нужно будет перестроить.
3) Отключить ваш уникальный статус вашего индекса.
Внесите изменения
Включите уникальный статус вашего индекса.