Как я могу обновить естественный ключ MySQL, избегая дублирования внешних ключей? - PullRequest
3 голосов
/ 28 марта 2012

Вот эта вещь:

У меня есть веб-приложение, созданное с помощью jQuery / php / mysql. Это своего рода диспетчер задач. У меня есть категории и задачи, относящиеся к категориям. Задачи имеют суррогатный первичный ключ (идентификатор автоинкремента), и для согласованности базы данных у меня есть естественный ключ (уникальный), например: (id_category, position)

Когда пользователь перемещает задачу, я должен обновить позицию (запрос ajax) этой задачи в БД, а также позиции всех других задач, которые связаны с изменениями. Например, если вы перемещаете заданную задачу с позиции 5 на позицию 2, задачи с позициями от 4 до 2 должны иметь увеличенную позицию на единицу. (Это мой подход; я знаю, что некоторые люди отправляют весь набор заданий данной категории с новыми позициями, но я пытаюсь обновить только те, которые должны быть)

Проблема в том, что я не знаю, как обновить позицию задач, не избегая дублирующейся ошибки в моем естественном ключе, потому что я не могу / не знаю, как обновить все одновременно.

Так вы могли бы помочь мне с этим или, может быть, я должен изменить свой подход. Я мог бы просто удалить уникальный индекс (естественный ключ), но механизмы согласованности баз данных для чего-то существуют ...

Спасибо за любую помощь.

1 Ответ

1 голос
/ 28 марта 2012
BEGIN TRANSACTION;
SET UNIQUE_CHECKS=0;
-- update 1
-- update 2
SET UNIQUE_CHECKS=1; 
COMMIT;

Должен это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...