En algunos casos, ejecutar una instrucción UPDATE en producción puede salvar el día. Sin embargo, una actualización defectuosa puede ser peor que el problema inicial.
Aparte de usar una base de datos de prueba, ¿cuáles son las opciones para saber qué hará una declaración de actualización antes de ejecutarla?
FOREIGN KEY UPDATE CASCADE
su sql falla¿Qué pasa con las transacciones? Tienen la función ROLLBACK.
@ver https://dev.mysql.com/doc/refman/5.0/en/commit.html
Por ejemplo:
Respuesta a la pregunta de @rickozoe a continuación:
En general, estas líneas no se ejecutarán como una vez. En PHP fe escribirías algo así (tal vez un poco más limpio, pero quería responder rápido ;-)):
Otra forma sería usar Variables MySQL (consulte https://dev.mysql.com/doc/refman/5.7/en/user-variables.htm ly https://stackoverflow.com/a/18499823/1416909 ):
Pero sugeriría usar los envoltorios de lenguaje disponibles en su lenguaje de programación favorito.
fuente
Autocommit OFF ...
MySQL
Activa la transmisión automática para la sesión actual.
Ejecuta su declaración, ve qué ha cambiado y luego retrocede si está mal o confirma si es lo que esperaba.
EDITAR: El beneficio de usar transacciones en lugar de ejecutar una consulta de selección es que puede verificar el conjunto resultante más fácilmente.
fuente
Sé que esta es una repetición de otras respuestas, pero tiene algo de apoyo emocional para dar el paso adicional para probar la actualización: D
Para probar la actualización, hash # es tu amigo.
Si tiene una declaración de actualización como:
Haces hash UPDATE y SET para pruebas, luego has hash de nuevo en:
Funciona para declaraciones simples.
Una solución adicional prácticamente obligatoria es obtener una copia (copia de seguridad duplicada), siempre que se utilice la actualización en una mesa de producción. Phpmyadmin> operaciones> copiar: table_yearmonthday. Solo toma unos segundos para tablas <= 100M.
fuente
No es una respuesta directa, pero he visto muchas situaciones fallidas de datos de prod que podrían haberse evitado escribiendo la
WHERE
cláusula primero . A veces, tambiénWHERE 1 = 0
puede ayudar a armar una declaración de trabajo de manera segura. Y mirar un plan de ejecución estimado, que estimará las filas afectadas, puede ser útil. Más allá de eso, en una transacción que revierte como han dicho otros.fuente
WHERE 1 = 0
es más portátil si alguien se encuentra con esto y está trabajando con un DBMS diferente. Por ejemplo, SQL Server no aceptaráWHERE FALSE
.En estos casos que desee probar, es una buena idea centrarse solo en los valores de columna actuales y en los valores de columna que se actualizarán pronto .
Por favor, eche un vistazo al siguiente código que escribí para actualizar los precios de WHMCS:
De esta manera comparamos claramente los valores ya existentes con los valores nuevos.
fuente
Ejecute la consulta de selección en la misma tabla con todas las
where
condiciones que está aplicando en la consulta de actualización.fuente
hacer una
SELECT
,como si tuvieras
UPDATE users SET id=0 WHERE name='jan'
convertirlo a
SELECT * FROM users WHERE name='jan'
fuente