Mam tabelę z unikatowego indeksu na dwóch kolumnach, id_parent i porządek_sortowania być precyzyjneMysql tymczasowo stłumić unikatowy indeks
+----+-----------+------------+-------------+-------------+-------------+
| 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 |
+----+-----------+------------+-------------+-------------+-------------+
Teraz chcę zaktualizować je do swoich danych oraz ich porządek_sortowania w jednej podróży. sort_order zmieni się z 1 - 2 - 3
na, na przykład 2 - 3 - 1
.
Ale kiedy zaczynam wykonywać instrukcje aktualizacji, unikalny indeks blokuje mnie, zgodnie z oczekiwaniami, mówiąc, że nie mogę mieć dwóch wierszy z id_parent = 1 and sort_order = 2
. Mogę teraz ustawić 4, zaktualizować inne wiersze w poprawnej kolejności, a następnie ustawić to. Ale wtedy musiałbym wygenerować dodatkową instrukcję i najprawdopodobniej dodać dodatkową logikę do mojego języka skryptowego, aby ustalić poprawną kolejność aktualizacji. Używam również ORM, a staje się jeszcze bardziej niewrażliwy.
Moje pytanie brzmi: czy istnieje sposób, aby mysql tymczasowo zignorował ten indeks? Jak rozpoczęcie specjalnej transakcji, w której indeksy byłyby obliczane tylko tuż przed jej zatwierdzeniem?
Czy Twoje tabele InnoDB lub MyISAM? – Pacerier