De manière pratique, il est essentiel de savoir comment supprimer d’une table, au cas où un utilisateur voudrait faire jouer son droit à l’effacement de ses données personnelles par exemple.
Il nous arrivera cependant beaucoup moins souvent d’avoir à supprimer une table ou une base de données. Il est toutefois bon de savoir le faire dans le cas d’une refonte d’un site entre autres.
Supprimer des données d’une table
Supprimer une ou plusieurs entrées choisies d’une table
Pour supprimer des données d’une table, nous allons utiliser l’instruction SQL DELETE FROM
.
Pour préciser quelles entrées doivent être supprimées, nous allons accompagner DELETE FROM
d’une clause WHERE
nous permettant de cibler des données en particulier dans notre table.
Pour tester cette instruction, nous allons utiliser la table « Users » créée précédemment (table contenant 4 colonnes et 3 entrées).
En pratique, pour supprimer une entrée en particulier, nous utiliserons la clause WHERE
sur une colonne « id » en ciblant un « id » précis.
Nous pouvons également supprimer plusieurs entrées en donnant une inégalité en condition de la clause WHERE
(cibler tous les « id » supérieurs à 5 par exemple) ou en ciblant un autre type de données (supprimer toutes les entrées dont la valeur dans la colonne « Prenom » est « Pierre » par exemple).
Ici, nous allons vouloir supprimer tous les utilisateurs dont le nom est « Giraud ».
<!DOCTYPE html> <html> <head> <title>Cours PHP / MySQL</title> <meta charset='utf-8'> </head> <body> <h1>Bases de données MySQL</h1> <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "root"; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM Users WHERE nom='Giraud'"; $sth = $dbco->prepare($sql); $sth->execute(); $count = $sth->rowCount(); print('Effacement de ' .$count. ' entrées.'); } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
On peut aller vérifier dans phpMyAdmin que notre entrée a bien été effacée :
Supprimer toutes les données d’une table
Pour supprimer toutes les données d’une table sans pour autant supprimer la table ni sa structure, c’est très simple, il suffit d’utiliser l’instruction SQL DELETE FROM
sans préciser de clause WHERE
.
Essayons par exemple d’effacer toutes les données de la table « Users » d’un coup.
<!DOCTYPE html> <html> <head> <title>Cours PHP / MySQL</title> <meta charset='utf-8'> </head> <body> <h1>Bases de données MySQL</h1> <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "root"; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM Users"; $sth = $dbco->prepare($sql); $sth->execute(); $count = $sth->rowCount(); print('Effacement de ' .$count. ' entrées.'); } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
Attention lorsque vous effacez des données : n’oubliez pas que cette action est irréversible. Réfléchissez donc bien avant d’exécuter ce genre d’action et faites un backup de votre base de données.
Supprimer complètement une table de la base de données
Pour supprimer complètement une table, nous allons cette fois-ci utiliser l’instruction SQL DROP TABLE
suivie du nom de la table que l’on souhaite supprimer.
Essayons par exemple de supprimer complètement notre table « Users ». Pas besoin d’utiliser de requête préparée ici car la suppression de tables ne sera jamais (ou ne devrait jamais être du moins !) à l’initiative de vos utilisateurs.
<!DOCTYPE html> <html> <head> <title>Cours PHP / MySQL</title> <meta charset='utf-8'> </head> <body> <h1>Bases de données MySQL</h1> <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "root"; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DROP TABLE Users"; $dbco->exec($sql); echo 'Table bien supprimée'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
Une nouvelle fois, faites bien attention avant d’effectuer ce genre d’opération : supprimer une table supprimera toutes les données qu’elle contient et cette action est irréversible. Pensez donc bien toujours à sauvegarder les données avant si vous pensez en avoir besoin un jour.
Supprimer complètement une base de données
Pour supprimer une base de données, nous utiliserons l’instruction SQL DROP DATABASE
suivie du nom de la base de données que l’on souhaite supprimer.
Une nouvelle fois, faites bien attention avant d’exécuter ce genre d’opération : supprimer une base de données supprimera de manière irréversible toutes les données qu’elle contient.
Il est temps de dire adieu à notre base de données « pdodb » !
<!DOCTYPE html> <html> <head> <title>Cours PHP / MySQL</title> <meta charset='utf-8'> </head> <body> <h1>Bases de données MySQL</h1> <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "root"; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DROP DATABASE pdodb"; $dbco->exec($sql); echo 'Base de données bien supprimée'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
Vous pouvez aller vérifier dans phpMyAdmin, notre base de données n’existe plus.