У меня есть таблица с уникальным индексом для двух столбцов, id_parent и sort_order, если быть точным
+----+-----------+------------+-------------+-------------+-------------+
| id | id_parent | sort_order | some_data | other_data | more_data |
+----+-----------+------------+-------------+-------------+-------------+
| 1 | 1 | 1 | lorem ipsum | lorem ipsum | lorem ipsum |
| 2 | 1 | 2 | lorem ipsum | lorem ipsum | lorem ipsum |
| 3 | 1 | 3 | lorem ipsum | lorem ipsum | lorem ipsum |
+----+-----------+------------+-------------+-------------+-------------+
Теперь я хочу обновить их, свои данные и их sort_order в одно время. sort_order изменится с 1 - 2 - 3
на, например, 2 - 3 - 1
.
Но когда я запускаю операторы обновления, уникальный индекс блокирует меня, как и ожидалось, и говорит, что у меня не может быть двух строк с id_parent = 1 and sort_order = 2
.
Ну, теперь я могу установить его 4, обновить другие строки в правильном порядке, а затем установить это.
Но тогда я должен был бы запустить дополнительный оператор и, скорее всего, добавить дополнительную логику для своего языка сценариев, чтобы определить правильный порядок обновлений.
Я также использую ORM, и он становится еще более неудобным.
Мой вопрос сейчас, есть ли какой-то способ заставить mysql временно игнорировать этот индекс? Как начать специальную транзакцию, в которой индексы будут вычисляться только до ее совершения?