Cómo probar las consultas de manipulación de datos antes de ejecutarlas en MySQL

Las instrucciones SQL de manipulación de datos o DML (Data Manipulation Language) pueden producir una grave pérdida o alteración de los datos. Un descuido en la sintaxis al escribir una orden UPDATE, por ejemplo, o cualquier otro «detalle» que pase desapercibido en ese momento pueden tener unas consecuencias completamente indeseadas para los valiosos datos. Para evitar caer en esa situación, existen dos posibilidades que no son mutuamente excluyentes. La primera, la más evidente, usar la instrucción por excelencia del DQL (Data Query Language):

SELECT

En un caso hipotético, se desea concatenar los campos del piso (adfloor) y el número (adnumber) a la dirección (address) como paso previo a la eliminación de estos. Un SELECT que adelante los resultados del UPDATE sería:

SELECT address, adnumber, adfloor,
concat(coalesce(address, ''), ' ', coalesce(adnumber, ''), ' ', coalesce(adfloor, '')) AS address_concat
FROM table;

Si los resultados son los esperados, puede lanzarse el UPDATE:

UPDATE table
SET address = concat(coalesce(address, ''), ' ', coalesce(adnumber, ''), ' ', coalesce(adfloor, ''));

La segunda, es mediante TCL (Transaction Control Language):

Transacciones

Este método sirve tanto para probar una instrucción de UPDATE como para las otras dos instrucciones DML: INSERT y DELETE.

Continuando con el caso hipotético anterior, primero se desactiva el commit automático de las órdenes:

SET autocommit=0;

En segundo lugar, se modifican los datos:

UPDATE table
SET address = concat(coalesce(address, ''), ' ', coalesce(adnumber, ''), ' ', coalesce(adfloor, ''));

A continuación, se verifica si los resultados son los esperados, por ejemplo mediante:

SELECT address, adnumber, adfloor
FROM table;

Si efectivamente los cambios son los esperados, se confirman con COMMIT. En caso contrario, con ROLLBACK se recuperan los datos tal y como eran antes.

Finalmente, una vez finalizado exitosamente todo el proceso, no debe olvidarse la reactivación del commit automático:

SET autocommit=1;

¡Toda precaución es poca a la hora de evitar el caos mundial!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.