Borrar o actualizar filas existentes en MySQL

En ocasiones conviene eliminar filas o modificar sus contenidos, para lo que utilizamos las instrucciones DELETE y UPDATE, que analizaremos en este tutorial.
La instrucción DELETE tiene el siguiente formato:

DELETE FROM nombre_tabla
WHERE filas que borrar;

La cláusula WHERE que especifica las filas que eliminar es opcional pero si la excluye, se borrarán todas las filas de la tabla. Es decir, la instrucción DELETE más sencilla también es la más peligrosa:

DELETE FROM nombre_tabla;

Mediante esta instrucción se eliminan todos los contenidos de la tabla. Para borrar filas concretas, debe utilizar la cláusula WHERE para identificar las filas correspondientes. Es similar a utilizar una cláusula WHERE en una instrucción SELECT para evitar seleccionar toda la tabla. Por ejemplo, para borrar de la tabla president los presidentes nacidos en Ohio, utilice lo siguiente:

mysql> DELETE FROM president WHERE state='OH';
Query OK, 7 rows affected (0.00 sec)

Si no está seguro de qué filas va a eliminar la instrucción DELETE, puede probar primero la cláusula WHERE en una instrucción SELECT. De este modo se asegura de borrar sólo las filas que desea. Imagine que desea borrar la fila de Teddy Roosevelt. ¿Serviría la siguiente instrucción?

DELETE FROM president WHERE last_name='Roosevelt';

Sí, ya que borra la fila correcta. No, ya que también borra la fila correspondiente a Franklin Roosevelt. Conviene comprobar la cláusula WHERE con una instrucción SELECT:

mysql> SELECT last_name, first_name FROM president
-> WHERE last_name='Roosevelt';

last_name first_name
Roosevelt Theodore
Roosevelt Franklin D.

Comprobamos que es necesario ser más específico y añadir una condición para el nombre:

mysql> SELECT last_name, first_name FROM president
-> WHERE last_name='Roosevelt' AND first_name='Theodore';

last_name first_name
Roosevelt Theodore

Ahora conocemos la cláusula WHERE que solamente identifica la fila que desea y ya podemos crear la instrucción DELETE correctamente:

mysql> DELETE FROM president
-> WHERE last_name='Roosevelt' AND first_name='Theodore';

Si le parece demasiado complicado para borrar una fila recuerde que es mejor prevenir que curar. Pero recuerde también que en algunos casos puede reducir el trabajo si utiliza técnicas de copiar y pegar, o de edición de líneas de entrada.
Para modificar filas existentes, utilice UPDATE, que emplea la siguiente sintaxis:

UPDATE nombre_tabla
SET columnas que cambiar
WHERE filas que actualizar;

La cláusula WHERE es similar a la de DELETE. Es opcional; si no la especifica, se actualizarán todas las filas de la tabla. Por ejemplo, la siguiente instrucción cambia el nombre de todos los alumnos por George:

mysql> UPDATE student SET name='George';

Evidentemente, debe tener cuidado con este tipo de instrucciones, por lo que conviene incluir una cláusula WHERE para especificar las filas que actualizar. Imagine que recientemente ha añadido un miembro a la asociación Historical League pero solamente ha completado alguna de sus columnas:

mysql> INSERT INTO member (last_name, first_name)
-> VALUES('York','Jerome');

Recuerda que ha olvidado la fecha de vencimiento de la suscripción. Puede corregirlo con una instrucción UPDATE que incluya la correspondiente cláusula WHERE para identificar la fila que cambiar:

mysql> UPDATE member
-> SET expiration='2009-7-20'
-> WHERE last_name='York' AND first_name='Jerome';

Puede actualizar varias columnas con una sola instrucción. La siguiente instrucción UPDATE modifica el correo y la dirección postal de Jerome:

mysql> UPDATE member
-> SET email='jeromey@aol.com', street='123 Elm St',
-> city='Anytown', state='NY', zip='01003'
-> WHERE last_name='York' AND first_name='Jerome';

También puede establecer el valor de una columna en NULL (siempre que admita este tipo de valores). Si en el futuro Jerome decide abonar la cuota de suscripción, podría establecer la fecha de vencimiento en NULL:

mysql> UPDATE member
-> SET expiration=NULL
-> WHERE last_name='York' AND first_name='Jerome';

Con UPDATE, igual que sucede con DELETE, es aconsejable probar una cláusula WHERE con una instrucción SELECT para seleccionar las filas correctas que actualizar. En caso contrario, si los criterios de selección son incorrectos, puede actualizar demasiadas filas o lo contrario.

Comparte