ESBORRAT DE DADES AMB PHP I MySQL.

 

Una tasca habitual amb bases de dades serà el haver d'esborrar certa informació. Anem a veure com realitzar l'esborrat de certs registres que compleixin una condició i l'esborrat complet de tots els registres (files) d'una taula. Per a això utilitzarem dues expressions per a operacions (consultes) sobre bases de dades que descriurem a continuació: delete i TRUNCATE.

 

 

SENTÈNCIA DELETE I CLÀUSULA WHERE

La sentència DELETE se sol usar per a esborrar uns registres d'una taula que compleixen una o diverses condiones. Utilitzarem una sintaxi d'aquest tipus:

mysqli_query($enllaç "DELETE FROM

NOMBRETABLA ON columna (>, <, =, etc.)

valorEspecificat");

Aquí estem emprant la clàusula WHERE que ens serveix per a indicar una condició. Per exemple DELETE FROM agenda WHERE alçada> 1.90 significa "esborrar totes les files de la taula agenda en les que a la columna altura hi hagi un valor més gran que 1.90". Fixa't que l'indicar major (i no major o igual) una fila on l'alçada sigui exactament 1.90 no serà esborrada.

La clàusula WHERE també pot ser aplicada quan fem consultes de tipus SELECT. Per exemple en lliuraments anteriors del curs fem servir SELECT * FROM agenda com a consulta que ens retornava totes les files de la taula agenda. Si escrivíssim SELECT * FROM agenda WHERE edat <= 35 obtindríem com a resultat totes les files de la taula agenda on la columna edat conté un valor menor o igual a 35.

En una clàusula where podem establir una condició d'igualtat (=) però també podrem usar altres condicions com a major (>), menor (<), major o igual (> =), menor o igual (<=), i també condicions múltiples i condicions més complexes, però no entrarem en detalls sobre això ara.

Igual que podem fer una consulta per obtenir totes les files d'una taula, també podrem esborrar tots els registres d'una taula en concret i, per això, només n'hi ha prou amb ometre les condicions, és a dir, fer una consulta escrivint el següent: DELETE FROM NOMBRETABLA

Òbviament és perillós fer consultes d'esborrat de dades amb bases de dades importants, ja que un error a l'hora d'escriure la consulta pot donar lloc a la pèrdua de dades. Nosaltres estem treballant amb una base de dades de proves, per la qual cosa no ens preocuparem per aquesta qüestió.

 

 

EXEMPLE

Partirem de la nostra base de dades on tenim una taula anomenada agenda amb les següents dades:

nom

cognoms

direccion

telèfon

edat

alçada

Manuel Jesús

López de la Rosa

C/ Joan Baptista Nº 3

658954875

32

1.80

Maria

Manzano Caps

C/ Arc del triomf Nº 7

695001002

19

1.99

Pedro Somoza Castro C/ Solera nº88, B 88834321 44 1.66
Juana Pérez Rozas AV Luarcato # 22 888111222 22 1.77
Pedro Gómez Gómez C/ Buenaventura 54 699887766 35 1.98
Antonio Delgado Folken C/ El Miraculós 77 699667744 88 1.71

Per no afectar aquesta taula, anem a duplicar la taula. Això ho podem fer manualment, però també podem fer-ho de forma automàtica amb phpMyAdmin. Per a això accedeix al panell d'administració del teu servidor, després a phpMyAdmin, prem sobre el nom de la base de dades i després sobre la taula. Ara ves a la pestanya "Operacions" i busca l'opció "Copia la taula a:". Posa com a nom agenda2 i triï l'opció "Copiar estructura i dades". Cliqueu a continuar. Un cop fet això podràs comprovar que a la base de dades tens dues taules: agenda i agenda2 (taula que acabem de copiar amb les mateixes dades que teníem en agenda).

Escriu aquest codi en un editor i guarda'l en un arxiu amb un nom com ejemplo1.php. Tingues en compte que hauràs d'introduir les dades de la teva pròpia base de dades (nom, user, etc.).

<? Php // Exemple curs PHP

$link=mysqli_connect ("sql203.byethost7.com","b7_10356956","*****");

mysqli_select_db($enllaç,"b7_10356956_mibasededatos");

mysqli_query($enllaç "DELETE FROM agenda2 ON alçada> 1,90");

mysqli_close($link); // Tanquem la connexió amb la base de dades

echo 'S'ha executat la consulta sobre la base de dades';

?>

Executa el codi. Amb aquest exercici esborrarem els registres de la taula agenda l'altura sigui més gran que 1.90, és a dir, a la taula agenda deixarà d'haver persones amb alçada superior a 1.90 perquè hauran estat esborrats.

Comprova amb phpMyAdmin que la taula ha quedat així:

nom

cognoms

direccion

telèfon

edat

alçada

Manuel Jesús

López de la Rosa

C/ Joan Baptista Nº 3

658954875

32

1.80

Pedro Somoza Castro C/ Solera nº88, B 88834321 44 1.66
Juana Pérez Rozas AV Luarcato # 22 888111222 22 1.77
Antonio Delgado Folken C/ El Miraculós 77 699667744 88 1.71

 

 

SENTÈNCIA TRUNCATE

La sentència TRUNCATE serveix per esborrar tots els registres d'una taula, igual que fèiem amb la funció DELETE sense condicions, però té algunes diferències amb aquesta que explicarem més endavant.

La sintaxi a emprar és:

mysqli_query($enllaç "TRUNCATE

TABLE NOMTAULA");

Igual que les operacions de tipus DELETE, aquesta operació és perillosa en el sentit que si s'executa erròniament pot donar lloc a la pèrdua de dades.

 

 

EXEMPLE

Escriu aquest codi en un editor i guarda'l en un arxiu amb un nom com exemple2.php. Tingues en compte que hauràs d'introduir les dades de la teva pròpia base de dades (nom, user, etc.). Executa el codi sobre la taula agenda2 per procedir a l'esborrat de totes les files d'aquesta taula.

<? Php

// Exemple curs PHP

$link=mysqli_connect ("sql203.byethost7.com","b7_10356956","*****");

mysqli_select_db($enllaç,"b7_10356956_mevabasededades");

mysqli_query($enllaç "TRUNCATE TABLE agenda2");

mysqli_close($enllaç);

// Tanquem la connexió amb la base de dades

echo 'S'ha executat la consulta TRUNCATE';

?>

 

 

Amb aquest codi esborrarem tots els registres de la taula agenda. Accedeix a la taula a través de phpMyAdmin i comprova que no existeixen registres.

Quina és la diferència entre utilitzar delete sense condiones i usar TRUNCATE?Anem a explicar-la a continuació.

 

 

DIFERÈNCIES ENTRE DELETE I TRUNCATE

a) Les dues eliminen les dades, no l'estructura de la taula.

b) Només DELETE permet l'eliminació condicional dels registres (és a dir, esborrar només certes files), TRUNCATE no ho permet.

c) TRUNCATE és més ràpida que DELETE.

d) TRUNCATE reiniciarà el comptador per a una taula que contingui una clau autoincrementada. Si en la nostra taula agenda tinguéssim un camp id autoincremental 1, 2, 3, 4, 5 ... n (fins al nombre de registres existents) en fer TRUNCATE el comptador tornarà a començar a 1. En canvi DELETE mantindrà el comptador de la taula per 1 clau autoincrementada. És a dir, si esborrem tots els registres d'una taula que tenia un camp comptador autoincremental l'últim valor era 3257, en inserir una dada després de l'esborrat el valor del comptador serà 3258 en lloc d'1.

e) TRUNCATE recrea una taula, és a dir, la taula desapareix completament i després és creada de nou, mentre que DELETE no fa que desaparegui la taula, només elimina els seus registres.

 

 

 

QUAN UTILITZAR DELETE I TRUNCATE

Utilitza TRUNCATE és més ràpid que DELETE si vas a esborrar tota una taula i no t'importen els índexs (claus autoincrementadas) o bé vols resetejarlos (fer que tornin a començar des 1).

Utilitza DELETE per esborrats selectius (esborrar determinats registres mantenint altres).

Hi ha altres qüestions que s'han de tenir en compte, però no et preocupis per això ara, ho aniràs descobrint a mesura que avenços en coneixements de programació i bases de dades.

 

 

EXERCICI 1

Realitza una consulta i mostra per pantalla les dades corresponents a files de la taula agenda on l'edat sigui més gran o igual que 20 i l'alçada sigui major o igual que 1.75.

 

 

EXERCICI 2

Crea una taula que sigui còpia d'agenda a la qual denomines agenda3 i un arxiu php que en executar-realitzi els següents processos:

a) Mostrar el contingut inicial de la taula agenda3 per pantalla.

b) Eliminar tots els registres de la taula agenda3 el camp edat sigui major o igual a 34 i mostrar el contingut actual de la taula per pantalla.

c) Inserir dos nous registres a la taula agenda3 (tria tu unes dades qualsevol) i mostrar el contingut actual de la taula per pantalla.

d) Eliminar tots els registres de la taula agenda3 usant TRUNCATE i mostrar el contingut actual de la taula per pantalla.

e) Inserir tres nous registres a la taula agenda3 (tria tu unes dades qualsevol) i mostrar el contingut actual de la taula per pantalla.

f) Eliminar tots els registres de la taula agenda usant DELETE sense condicions i mostrar el contingut actual de la taula per pantalla.