Codificación aprenderaprogramar.com: CU00844B
BORRADO DE DATOS CON PHP Y MySQL.
Una tarea habitual con bases de datos será el tener que borrar cierta información. Vamos a ver cómo realizar el borrado de ciertos registros que cumplan una condición y el borrado completo de todos los registros (filas) de una tabla. Para ello utilizaremos dos expresiones para operaciones (consultas) sobre bases de datos que describiremos a continuación: delete y truncate.
SENTENCIA DELETE Y CLÁUSULA WHERE
La sentencia DELETE se suele usar para borrar unos registros de una tabla que cumplen una o varias condiones. Vamos a utilizar una sintaxis de este tipo:
mysqli_query($link, " DELETE FROM nombreTabla WHERE columna (>, <, =, etc.) valorEspecificado "); |
Aquí estamos empleando la cláusula WHERE que nos sirve para indicar una condición. Por ejemplo DELETE FROM agenda WHERE altura > 1.90 significa “borrar todas las filas de la tabla agenda en las que en la columna altura exista un valor mayor que 1.90”. Fíjate que al indicar mayor (y no mayor o igual) una fila donde la altura sea exactamente 1.90 no será borrada.
La cláusula WHERE también puede ser aplicada cuando hacemos consultas de tipo SELECT. Por ejemplo en entregas anteriores del curso usamos SELECT * FROM agenda como consulta que nos devolvía todas las filas de la tabla agenda. Si escribiéramos SELECT * FROM agenda WHERE edad <= 35 obtendríamos como resultado todas las filas de la tabla agenda donde la columna edad contiene un valor menor o igual a 35.
En una cláusula where podemos establecer una condición de igualdad (=) pero también podremos usar otras condiciones como mayor (>), menor(<), mayor o igual (>=), menor o igual (<=), y también condiciones múltiples y condiciones más complejas, pero no vamos a entrar en detalles sobre esto ahora.
Igual que podemos hacer una consulta para obtener todas las filas de una tabla, también podremos borrar todos los registros de una tabla en concreto y, para ello, sólo basta con omitir las condiciones, es decir, hacer una consulta escribiendo lo siguiente: DELETE FROM nombreTabla
Obviamente es peligroso hacer consultas de borrado de datos con bases de datos importantes, ya que un error a la hora de escribir la consulta puede dar lugar a la pérdida de datos. Nosotros estamos trabajando con una base de datos de pruebas, por lo que no nos preocuparemos por esta cuestión.
EJEMPLO
Partiremos de nuestra base de datos donde tenemos una tabla denominada agenda con los siguientes datos:
nombre |
apellidos |
direccion |
telefono |
edad |
altura |
Manuel Jesús |
López de la Rosa |
C/Juan Bautista Nº 3 |
658954875 |
32 |
1.80 |
María |
Manzano Cabezas |
C/Arco del triunfo Nº 7 |
695001002 |
19 |
1.99 |
Pedro | Somoza Castro | C/Solera nº88, B | 88834321 | 44 | 1.66 |
Juana | Pérez Rozas | Avda. Luarcato nº22 | 888111222 | 22 | 1.77 |
Pedro | Gómez Gómez | C/Buenaventura 54 | 699887766 | 35 | 1.98 |
Antonio | Delgado Folken | C/ El Milagroso 77 | 699667744 | 88 | 1.71 |
Para no afectar a esta tabla, vamos a duplicar la tabla. Esto lo podemos hacer manualmente, pero también podemos hacerlo de forma automática con phpMyAdmin. Para ello accede al panel de administración de tu servidor, luego a phpMyAdmin, pulsa sobre el nombre de la base de datos y luego sobre la tabla. Ahora vete a la pestaña “Operaciones” y busca la opción “Copiar la tabla a:”. Pon como nombre agenda2 y elige la opción “Copiar estructura y datos”. Pulsa en continuar. Una vez hecho esto podrás comprobar que en la base de datos tienes dos tablas: agenda y agenda2 (tabla que acabamos de copiar con los mismos datos que teníamos en agenda).
Escribe este código en un editor y guárdalo en un archivo con un nombre como ejemplo1.php. Ten en cuenta que deberás introducir los datos de tu propia base de datos (nombre, user, etc.).
<?php //Ejemplo curso PHP aprenderaprogramar.com $link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****"); mysqli_select_db($link, "b7_10356956_mibasededatos"); mysqli_query($link, "DELETE FROM agenda2 WHERE altura > 1.90"); mysqli_close($link); // Cerramos la conexion con la base de datos echo 'Se ha ejecutado la consulta sobre la base de datos'; ?> |
Ejecuta el código. Con este ejercicio borraremos los registros de la tabla agenda cuya altura sea mayor que 1.90, es decir, en la tabla agenda dejará de haber personas con altura superior a 1.90 porque habrán sido borrados.
Comprueba con phpMyAdmin que la tabla ha quedado así:
nombre |
apellidos |
direccion |
telefono |
edad |
altura |
Manuel Jesús |
López de la Rosa |
C/Juan Bautista Nº 3 |
658954875 |
32 |
1.80 |
Pedro | Somoza Castro | C/Solera nº88, B | 88834321 | 44 | 1.66 |
Juana | Pérez Rozas | Avda. Luarcato nº22 | 888111222 | 22 | 1.77 |
Antonio | Delgado Folken | C/ El Milagroso 77 | 699667744 | 88 | 1.71 |
SENTENCIA TRUNCATE
La sentencia TRUNCATE sirve para borrar todos los registros de una tabla, al igual que hacíamos con la función DELETE sin condiciones, pero tiene algunas diferencias con ésta que explicaremos más adelante.
La sintaxis a emplear es:
mysqli_query($link, "TRUNCATE TABLE nombreTabla"); |
Al igual que las operaciones de tipo DELETE, esta operación es peligrosa en el sentido de que si se ejecuta erróneamente puede dar lugar a la pérdida de datos.
EJEMPLO
Escribe este código en un editor y guárdalo en un archivo con un nombre como ejemplo2.php. Ten en cuenta que deberás introducir los datos de tu propia base de datos (nombre, user, etc.). Ejecuta el código sobre la tabla agenda2 para proceder al borrado de todas las filas de esta tabla.
<?php //Ejemplo curso PHP aprenderaprogramar.com $link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****"); mysqli_select_db($link, "b7_10356956_mibasededatos"); mysqli_query($link, "TRUNCATE TABLE agenda2"); mysqli_close($link); // Cerramos la conexion con la base de datos echo 'Se ha ejecutado la consulta TRUNCATE'; ?> |
Con este código borraremos todos los registros de la tabla agenda. Accede a la tabla a través de phpMyAdmin y comprueba que no existen registros.
¿Cuál es la diferencia entre usar delete sin condiones y usar truncate? Vamos a explicarla a continuación.
DIFERENCIAS ENTRE DELETE Y TRUNCATE
a) Ambas eliminan los datos, no la estructura de la tabla.
b) Sólo DELETE permite la eliminación condicional de los registros (es decir, borrar sólo ciertas filas), TRUNCATE no lo permite.
c) TRUNCATE es más rápida que DELETE.
d) TRUNCATE reiniciará el contador para una tabla que contenga una clave autoincrementada. Si en nuestra tabla agenda tuviéramos un campo id autoincremental 1, 2, 3, 4, 5 … n (hasta el número de registros existentes) al hacer TRUNCATE el contador volverá a empezar en 1. En cambio DELETE mantendrá el contador de la tabla para una clave autoincrementada. Es decir, si borramos todos los registros de una tabla que tenía un campo contador autoincremental cuyo último valor era 3257, al insertar un dato después del borrado el valor del contador será 3258 en lugar de 1.
e) TRUNCATE recrea una tabla, es decir, la tabla desaparece completamente y luego es creada de nuevo, mientras que DELETE no hace que desaparezca la tabla, sólo elimina sus registros.
CUÁNDO USAR DELETE Y TRUNCATE
Usar TRUNCATE es más rapido que DELETE si vas a borrar toda una tabla y no te importan los indices (claves autoincrementadas) o bien quieres resetearlos (hacer que vuelvan a empezar desde 1).
Usar DELETE para borrados selectivos (borrar determinados registros manteniendo otros).
Hay otras cuestiones que se deben tener en cuenta, pero no te preocupes por esto ahora, lo irás descubriendo a medida que avances en conocimientos de programación y bases de datos.
EJERCICIO 1
Realiza una consulta y muestra por pantalla los datos correspondientes a filas de la tabla agenda donde la edad sea mayor o igual que 20 y la altura sea mayor o igual que 1.75.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros aprenderaprogramar.com.
EJERCICIO 2
Crea una tabla que sea copia de agenda a la que denomines agenda3 y un archivo php que al ejecutarlo realice los siguientes procesos:
a) Mostrar el contenido inicial de la tabla agenda3 por pantalla.
b) Eliminar todos los registros de la tabla agenda3 cuyo campo edad sea mayor o igual a 34 y mostrar el contenido actual de la tabla por pantalla.
c) Insertar dos nuevos registros en la tabla agenda3 (elige tú unos datos cualquiera) y mostrar el contenido actual de la tabla por pantalla.
d) Eliminar todos los registros de la tabla agenda3 usando TRUNCATE y mostrar el contenido actual de la tabla por pantalla.
e) Insertar tres nuevos registros en la tabla agenda3 (elige tú unos datos cualquiera) y mostrar el contenido actual de la tabla por pantalla.
f) Eliminar todos los registros de la tabla agenda usando DELETE sin condiciones y mostrar el contenido actual de la tabla por pantalla.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros aprenderaprogramar.com.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.