DELETE
permet de supprimer des données d’une table dans une base de données (la base de données peut être une base MySQL, PostgreSQL, etc.).
La suppression de données dans une table est une opération moins courante que l’insertion avec la commande SQL INSERT
, la sélection avec SQL SELECT
ou la mise à jour avec SQL UPDATE
.
Cela reste cependant l’une des opérations de base qu’il faut savoir exécuter et qu’il faut connaitre pour ne pas supprimer par erreur de mauvaises données.
Nous allons pouvoir supprimer une ou plusieurs entrées dans une table avec SQL DELETE
. Nous utiliserons souvent cette commande avec WHERE
pour ne supprimer que les entrées qui correspondent à un certain critère.
Syntaxe de la commande SQL DELETE
La commande SQL DELETE
nous permet de supprimer certaines données dans une table d’une base de données.
Nous allons pouvoir l’utiliser de deux façons différentes : on va soit pouvoir utiliser DELETE
pour supprimer toutes les données d’une table d’un coup, soit l’utiliser pour ne supprimer que certaines données choisies répondant à un critère défini par une clause WHERE
par exemple.
Supprimer toutes les données d’une table d’un coup
La commande SQL DELETE
nous permet déjà de supprimer très simplement toutes les données d’une table d’un coup. Pour cela, il suffit d’utiliser la syntaxe DELETE FROM nom_de_table
.
Attention : la suppression de données dans une base de données est définitive. Il est donc conseillé de toujours effectuer une copie de la base avant de la manipuler.
Supprimer uniquement les données qui répondent à un certain critère avec SQL DELETE et WHERE
Il est rare que nous voulions supprimer toutes les données ‘une base de données. généralement, nous ne voudrons supprimer que certaines entrées choisies. Pour cela, nous allons pouvoir ajouter une clause WHERE
à notre requête SQL utilisant DELETE
.
Nous allons utiliser la syntaxe DELETE FROM nom_de_table WHERE condition
.
Pour ne supprimer qu’une entrée spécifiques par exemple nous allons pouvoir nous appuyer sur la colonne id
de la table si celle-ci en possède une pour construire notre condition. On pourra alors écrire quelque chose comme DELETE FROM nom_de_table WHERE id = nombre
.
Exemples d’utilisation de SQL DELETE
Pour tester la commande SQL DELETE
, nous allons avoir besoin d’une base de données avec une table au moins.
Il existe différentes méthodes créer une base de données et une table. Les deux plus courantes sont l’utilisation de phpMyAdmin ou d’un script PHP avec une extension mysql ou PDO.
Ici, nous allons créer une base MySQL cours
contenant une table users
. Je vous invite donc à démarrer vos serveurs (en utilisant MAMP, WAMP, etc.) et à aller dans votre phpMyAdmin (accessible depuis la page de démarrage de WAMP, MAMP…).
Créez ensuite la base cours
en allant dans l’onglet “base de données” puis dans le champ “créer un base”. Sélectionnez finalement la base en cliquant dessus puis allez dans l’onglet “import” pour importer la table users
que je vous ai préparée et que vous pouvez télécharger en cliquant ici.
Cette table users
contient 6 colonnes et huit champs comme sur l’image ci-dessous :
Suppression de données via phpMyAdmin
Commençons par essayer de supprimer des entrées de notre table avec phpMyAdmin. Pour cela, commençons par sélectionner notre table “users” dans phpMyAdmin puis par nous rendre dans l’onglet “SQL”.
Nous allons ici pour écrire directement nos requêtes SQL. Commençons par supprimer la 7è entrée de la table. Pour cela, nous allons utiliser DELETE
avec une clause WHERE id = 7
comme cela :
Si on souhaite supprimer toutes les entrées dans notre table sans supprimer la table en elle même, il nous suffit d’utiliser DELETE
sans clause WHERE
. Nous allons faire cette opération dans la suite de ce tutoriel avec PHP puisqu’on ne peut supprimer les entrées de notre table qu’une fois (à moins d’en faire une sauvegarde entre temps).
Suppression de données avec PHP et l’extension PDO
Bien souvent, nous voudrons supprimer les données en base de données de façon dynamique. On peut par exemple laisser la possibilité aux gens inscrits sur notre site de supprimer leurs données personnelles. Pour réaliser cela, nous n’allons pas pouvoir passer par phpMyAdmin mais devrons plutôt utiliser un langage de script serveur comme le PHP.
Pour communiquer avec les bases de données, nous allons pouvoir utiliser l’une des deux extensions PHP mysql ou PDO. Dans ce tutoriel, j’utiliserai PDO.
Commençons par créer un fichier delete.php
. Ce fichier va contenir le code PHP pour se connecter à la base de données cours
et pour supprimer les données dans notre table users
.
Pour supprimer les données, nous allons ici utiliser les requêtes préparées et donc les fonctions prepare()
er execute()
.
Nous allons utiliser des marqueurs nommées et la fonction bindParam()
pour lier ces marqueurs (paramètres) à des variables PHP.
Nous allons ainsi facilement pouvoir supprimer une, plusieurs ou toutes les entrées d’une table comme ceci :
<!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 = "cours"; $user = "root"; $pass = "root"; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*Supprime l'entrée avec l'id = 8 $user_id = 8; $req = $dbco->prepare("DELETE FROM users WHERE id = :user_id"); $req->bindParam(':user_id', $user_id, PDO::PARAM_INT); $req->execute(); */ //Supprime toutes les entrées de la table $user_id = 0; $req = $dbco->prepare("DELETE FROM users WHERE id >= :user_id"); $req->bindParam(':user_id', $user_id, PDO::PARAM_INT); $req->execute(); echo 'Données supprimées'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
Ce script nous permet de nous connecter à une base de données locale nommée “cours” et de supprimer les données relatives à toutes les entrées dont l’id est supérieur ou égal à 0 dans la table “users” de la base “cours”.
Mise en garde sur l’utilisation de la commande SQL DELETE
Il convient de toujours faire bien attention lorsqu’on manipule les données d’une base de données car la plupart des manipulations sont permanentes et donc non réversibles.
En particulier, lorsqu’on utilise une commande SQL DELETE
, il faut porter une attention particulière à la clause WHERE
qui l’accompagne souvent. Si on omet cette clause WHERE
, toutes les entrées de la table seront supprimées, ce qui n’est généralement pas le comportement voulu.
Supprimer une table avec DROP TABLE
La commande SQL DELETE
permet de supprimer des données dans une table mais ne permet pas de supprimer une table ou une base de données en soi.
Pour supprimer une table ou une base, il faudra plutôt utiliser la commande DROP
en précisant le nom de la table ou de la base de données à supprimer.