Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Duplicate entry при Update / 3 сообщений из 3, страница 1 из 1
03.06.2016, 12:36
    #39250019
Danem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry при Update
Не нашел подобного обсуждения.

Пример несколько сферичен, на практике чуть сложнее таблица.

Входные данные:
Создаем таблицу с уник. индексом.

Код: sql
1.
2.
3.
CREATE TABLE `phone` ( `id` INT NOT NULL AUTO_INCREMENT , `num` INT NOT NULL , `text` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`)) ENGINE = MyISAM;

ALTER TABLE `skyinform2`.`phone` ADD UNIQUE (`num`);



Добавляем данных
Код: sql
1.
INSERT INTO `phone`(num,text) values (1,'Первый'), (2,'Второй')



Теперь немного к практич. применению. Предположим, таблица с упорядоченными телефонами или товарам, где id - уник. индекс, num- порядковый номер.
text - телефон, название.

Вот хочу сдвинуть везде порядковый номер на 1, и первым вставить новую позицию. Делаю запрос:
Код: sql
1.
UPDATE `phone` set num = num+1;



И получаю ошибку

Duplicate entry '2' for key 'num'

Пока нашел два решения:
1) сделать update ignore. На практике показало, что не работает, обновляет только последнюю запись, остальные так и остаются
2) делать update по одной записи. Слишком накладно мне кажется при 1000 записей делать 1000 запросов. А записей, если мы говорим о списке товаров может быть и больше.

Убирать unique индекс тоже не хотелось бы, т.к. пытаюсь с таблицей работает много каких скриптов, и хотелось бы защититься от некорректных данных.

Ни то, ни другое меня не устраивает.
Есть у кого-нибудь хороший способ для решения для такой задачи?
...
Рейтинг: 0 / 0
03.06.2016, 12:45
    #39250031
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry при Update
http://dev.mysql.com/doc/refman/5.7/en/update.html If the ORDER BY clause is specified, the rows are updated in the order that is specified.
...
Рейтинг: 0 / 0
03.06.2016, 12:52
    #39250043
Danem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry при Update
tanglir, Большое спасибо, а то уже почти собрался переписывать на вариант с updateм по одной записи.

Запрос работает как надо:
Код: sql
1.
UPDATE `phone` set num = num+1 order by num desc;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Duplicate entry при Update / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]