Está en la página 1de 5

Centro Educativo Integral Priv. Subv.

“San Benito”
“San Benito para todos, todos para San
Benito”

Borrado de registros de una tabla (delete)


Para eliminar los registros de una tabla usamos el comando "delete":
delete from usuarios;
La ejecución del comando indicado en la línea anterior borra TODOS los
registros de la tabla.
Si queremos eliminar uno o varios registros debemos indicar cuál o cuáles,
para ello utilizamos el comando "delete" junto con la clausula "where" con la
cual establecemos la condición que deben cumplir los registros a borrar. Por
ejemplo, queremos eliminar aquel registro cuyo nombre de usuario es
'Leonardo':
delete from usuarios where nombre='Leonardo';
Si solicitamos el borrado de un registro que no existe, es decir, ningún registro
cumple con la condición especificada, no se borrarán registros, pues no
encontró registros con ese dato.
El comando delete hay que tener mucho cuidado en su uso, una vez eliminado
un registro no hay forma de recuperarlo. Si por ejemplo ejecutamos el
comando:
delete from usuarios;
Si la tabla tiene 1000000 de filas, todas ellas serán eliminadas.
En MySQL hay una variable de configuración llamada SQL_SAFE_UPDATES
que puede almacenar los valores 1 (activa) y 0 (desactiva). Cuando tiene el
valor 1 no permite ejecutar comandos delete sin indicar un where y que dicho
where se relacione a una clave primaria, tema que veremos más adelante.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutamos los siguientes comandos
SQL donde utilizamos entre otros el comando delete:
drop table if exists usuarios;

create table usuarios (


nombre varchar(30),
clave varchar(10)
);
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');
Centro Educativo Integral Priv. Subv. “San Benito”
“San Benito para todos, todos para San
Benito”

insert into usuarios (nombre, clave) values ('Gustavo','River');


delete from usuarios;
delete from usuarios where nombre='Leonardo';
select nombre,clave from usuarios;
delete from usuarios where clave='River';
select nombre,clave from usuarios;

Si ejecutamos este conjunto de comandos SQL se produce un error en el


primer comando 'delete' debido a que la variable 'SQL_SAFE_UPDATES' tiene
el valor 1 (es decir está activa), en MySQL 8.0 se instala por defecto para la
variable 'SQL_SAFE_UPDATES' con el valor 1:

Soluciones
La idea de que no se puedan ejecutar ciertos comandos 'delete' es para evitar
borrados masivos de datos que luego no podemos recuperar.
Tenemos dos soluciones para resolver el problema de los 'delete', la primera es
encerrar todo el bloque donde ejecutamos los comandos delete cambiando el
esta de la variable 'SQL_SAFE_UPDATES':
1. El primer método es cambiar el estado de la variable
SQL_SAFE_UPDATES en forma temporal:
2. drop table if exists usuarios;
Centro Educativo Integral Priv. Subv. “San Benito”
“San Benito para todos, todos para San
Benito”

3. create table usuarios (


4. nombre varchar(30),
5. clave varchar(10)
6. );

7. insert into usuarios (nombre, clave) values ('Leonardo','payaso');


8. insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
9. insert into usuarios (nombre, clave) values ('Marcelo','River');
10. insert into usuarios (nombre, clave) values ('Gustavo','River');
11. set SQL_SAFE_UPDATES=0;
12. delete from usuarios;
13. delete from usuarios where nombre='Leonardo';
14. select nombre,clave from usuarios;
15. delete from usuarios where clave='River';
16. select nombre,clave from usuarios;
17. set SQL_SAFE_UPDATES=1;
Tengamos en cuenta que disponer la variable SQL_SAFE_UPDATES para que
los borrados sean solo seguros es muy conveniente cuando hay
programadores que recién están comenzando en SQL y hay datos valiosos ya
almacenados.
Podemos saber el estado global de la variable 'SQL_SAFE_UPDATES'
mediante la consulta:
select @@sql_safe_updates;
18. El segundo método es cambiar el estado de la variable
SQL_SAFE_UPDATES a nivel general, para ello desde el programa
"Workbench" ingresamos a la opción Edit -> Preferences...:
Centro Educativo Integral Priv. Subv. “San Benito”
“San Benito para todos, todos para San
Benito”

En en la pestaña "SQL Editor" debemos desmarcar la opción "Safe Updates


(eject Updates and Deletes with not restrictions)", con esto se permite ejecutar
cualquier comando SQL delete, sin importar la cantidad de filas que se borran:

Debemos cerrar y volver a entrar al programa "Workbench" para que el cambio


se haga efectivo.
Centro Educativo Integral Priv. Subv. “San Benito”
“San Benito para todos, todos para San
Benito”

Si prueba en el servidor tutorialesprogramacionya.com el comando SQL 'delete'


verá que no hay restricciones en el borrado de filas, es decir que la variable
SQL_SAFE_UPDATES se encuentra en '0'.
Seguramente cambiará el estado de la variable 'SQL_SAFE_UPDATES' a '0'
en su servidor, pero es bueno tener cuidado cada vez que ejecutamos un
comando SQL 'delete':

También podría gustarte