SQL DELETE – Suppression de données en base de données

La commande SQL 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 :

Création d'une base SQL et d'une table

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 :

Requête SQL DELETE pour supprimer des données dans une table

Résultat de requête SQL DELETE pour supprimer des données dans une table

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”.

Requête SQL DELETE pour supprimer des données dans une table via PDO PHP

 

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.

Laisser un commentaire