Tengo una tabla con índice único en dos columnas, id_parent y sort_order para ser precisosMysql suprimir temporalmente índice único
+----+-----------+------------+-------------+-------------+-------------+
| 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 |
+----+-----------+------------+-------------+-------------+-------------+
Ahora quiero actualizarlos, sus datos y su sort_order en una marcha. sort_order cambiaría de 1 - 2 - 3
a, por ejemplo, 2 - 3 - 1
.
Pero cuando empiezo a ejecutar las instrucciones de actualización, el índice único me bloquea, como se esperaba, diciendo que no puedo tener dos filas con id_parent = 1 and sort_order = 2
. Bueno, podría configurarlo 4 por ahora, actualizar otras filas en el orden correcto y luego configurar esta. Pero luego, tendría que ejecutar una declaración adicional, y probablemente agregue lógica adicional a mi lenguaje de scripting para determinar el orden correcto de las actualizaciones. También uso ORM, y se vuelve aún más inconveniente.
Mi pregunta ahora, ¿hay algún método para hacer caso omiso de MySQL temporalmente este índice? Como comenzar una transacción especial, ¿en qué índices se calcularían justo antes de comprometerla?
Son sus tablas InnoDB o MyISAM? – Pacerier