Retour à la liste des articles Articles
7 minutes de lecture

Qu'est-ce que l'instruction DELETE en SQL ?

Cet article explique l'utilisation de l'instruction DELETE, l'une des principales méthodes pour supprimer les enregistrements existants de votre base de données. Nous commencerons par expliquer la syntaxe, puis nous donnerons quelques exemples faciles à comprendre.

L'instruction DELETE en SQL est extrêmement utile. Elle vous permet de supprimer toutes les données obsolètes ou "mauvaises" des tables de votre base de données. Vous devez faire preuve de prudence lorsque vous utilisez l'instruction DELETE, car l'opération n'est pas réversible. Il n'y aura pas de boîte de dialogue vous demandant de confirmer l'opération. Une fois que vous aurez exécuté une requête DELETE, les données auront disparu - pour toujours !

L'instruction DELETE est connue comme une commande de manipulation de données. Cet article traite des autres commandes de ce type, à savoir INSERT et UPDATE.

Explorons maintenant la syntaxe de la commande SQL DELETE.

Syntaxe de l'instruction SQL DELETE

La syntaxe de l'instruction DELETE est la suivante :

DELETE FROM  [WHERE ]

La table dont vous souhaitez supprimer les données vient après l'instruction DELETE.

Les crochets indiquent que cette clause WHERE est entièrement facultative. Mais dans la pratique, vous utiliserez cette clause presque tout le temps - si vous n'incluez pas une clause WHERE, toutes les données de la table seront supprimées.

C'est pourquoi il est toujours judicieux d'utiliser SELECT pour afficher les données que vous souhaitez supprimer. Lorsque le résultat de votre requête SELECT est égal aux données que vous avez l'intention de supprimer, il suffit de remplacer la clause SELECT de votre requête par l'instruction DELETE. Toutes les autres parties de votre requête peuvent rester inchangées. Cela vous permettra d'éviter de supprimer accidentellement des données essentielles par erreur.

Voilà qui conclut notre examen de la syntaxe SQL DELETE. Il est temps d'examiner quelques exemples pratiques, qui illustreront différentes utilisations de l'instruction DELETE et aborderont certains problèmes de permissions auxquels vous pouvez être confronté.

Autorisations SQL DELETE

Avant de passer en revue nos exemples, il est important de noter que (selon le dialecte SQL que vous utilisez) vous devrez peut-être modifier les autorisations de l'utilisateur pour pouvoir modifier des enregistrements avec l'instruction DELETE.

Par défaut, MySQL Workbench démarre en mode sécurisé ; vous ne pouvez pas utiliser UPDATE ou DELETE sans une condition WHERE.

Par exemple, lorsque vous utilisez MySQL, vous rencontrez le message suivant : "Vous utilisez le mode de mise à jour sécurisé et vous avez essayé de mettre à jour une table sans WHERE qui utilise une colonne KEY. Pour désactiver le mode sécurisé, basculez l'option dans Préférences → Éditeur SQL et reconnectez-vous".

Pour rectifier cette situation, vous avez deux options.

  1. Modifiez vos paramètres comme suit :
    1. Allez dans Édition →
    2. Cliquez sur l'onglet Éditeur SQL et décochez la case Mises à jour sécurisées.
    3. Cliquez sur Requête → Reconnexion au serveur.
    4. Exécutez votre requête SQL.
  2. Ou vous pouvez exécuter la requête suivante :
    SET SQL_SAFE_UPDATES = 0;

Après avoir effectué l'une ou l'autre de ces options, vous devriez être en mesure d'utiliser DELETE pour supprimer les données de vos tables.

Maintenant, passons aux exemples !

Exemples de DELETE SQL

Suppression simple

Imaginez que nous gérons une base de données d'employés et que nous venons d'apprendre que certains d'entre eux ont quitté l'entreprise. Nous allons les supprimer de notre table employees table. Jetons un coup d'oeil à l'état actuel de cette table :

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36
3GeorgeHarrison41
4RingoStarr49

Imaginons que nous devions supprimer George Harrison et Ringo Starr de notre table. Quelles sont nos options ?

Nous devons nous assurer des valeurs de la colonne employee_id avant de supprimer ces enregistrements. Après avoir fait cela, la requête DELETE ressemblerait à ceci :

DELETE FROM employees
WHERE employee_id = 3 OR employee_id = 4

Cela supprimerait George et Ringo de notre table.

Vous pouvez également spécifier une condition unique qui capturerait ces deux enregistrements en même temps. Dans ce cas, comme George et Ringo ont tous deux plus de 40 ans, nous pouvons utiliser la colonne age:

DELETE FROM employees
WHERE age > 40

L'exécution de cette requête nous laissera avec les enregistrements suivants dans notre employees table.

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36

Nos enregistrements ont été supprimés avec succès ! Si vous souhaitez voir d'autres exemples de DELETE, consultez cet article du livre de recettes, qui vous montre comment supprimer une ou plusieurs lignes de données.

Voyons maintenant un exemple plus avancé qui utilise une sous-requête pour supprimer des données.

Sous-requête DELETE

Vous pouvez également supprimer des données de vos tables à l'aide de sous-requêtes. On parle de sous-requête lorsqu'une requête est utilisée comme partie d'une autre. Vous pouvez en savoir plus sur les sous-requêtes en lisant cet article destiné aux débutants. Examinons un scénario dans lequel nous pouvons utiliser une DELETE avec une sous-requête.

Nous allons à nouveau utiliser notre table employees à nouveau :

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36
3GeorgeHarrison41
4RingoStarr49

Nous avons aussi une table sales_team qui contient les enregistrements de tous les membres du service commercial de l'entreprise :

idfirst_namelast_name
1JohnLennon
3GeorgeHarrison

Nous venons de recevoir la terrible nouvelle que l'équipe des ventes est licenciée. C'est à nous de mettre à jour la table employees et sales_team et .

Je vais vous montrer comment une sous-requête peut nous aider dans ce scénario particulier. Voici la requête :

DELETE FROM employees
WHERE employee_id 
IN (SELECT id
FROM sales_team)

Ok, décomposons-la.

La requête entre parenthèses rondes (c'est-à-dire la sous-requête) renvoie toutes les valeurs id de la table sales_team de la table

SELECT id FROM sales_team

Cette requête nous donne les valeurs 1 et 3.

Regardons la partie DELETE de la requête principale :

DELETE FROM employees
WHERE employee_id 
IN...

Remarquez la clause WHERE. Dans cette partie de la requête, nous cherchons à supprimer les enregistrements où employee_id figure dans les résultats de notre sous-requête. Rappelez-vous que la sous-requête a été évaluée à 1 et 3. Donc, cette requête est évaluée à :

DELETE FROM employees
WHERE employee_id 
IN (1,3)

Supposons que nous exécutions la requête complète et que nous utilisions la requête SELECT ci-dessous pour afficher les résultats :

SELECT employee_id, first_name, last_name, age
FROM employees

Voici ce que nous obtenons :

employee_idfirst_namelast_nameage
2PaulMcCartney36
4RingoStarr49

Et voilà ! L'équipe de vente a été supprimée avec succès de la table employees table. Vous pouvez constater l'utilité d'une sous-requête pour ce cas d'utilisation.

Il s'agit d'un cas d'utilisation légèrement plus avancé. Lors de l'examen de l'instruction DELETE, il convient de mentionner les instructions TRUNCATE et DROP:

  • TRUNCATE est plus rapide que DELETE, car elle n'analyse pas la table avant de supprimer les enregistrements. De ce fait, elle ne peut pas être utilisée avec la condition WHERE ni vous dire combien de lignes ont été supprimées une fois l'opération terminée.
  • La commande DROP TABLE supprime tout ce qui a trait à cette table : la définition de la table et tous les index, déclencheurs et contraintes associés.

Pour en savoir plus sur ces deux méthodes de suppression des données, lisez cet article sur l'utilisation des sous-requêtes avec INSERT, UPDATE et DELETE. Vous pouvez également consulter cet article qui traite de la différence entre DELETE, TRUNCATE et DROP.

Suppression des contraintes de clé primaire et de clé étrangère

Une dernière chose dont nous devons parler est la contrainte de clé primaire (PK) et de clé étrangère (FK). Lorsque vous travaillez sur de petits exemples comme ceux présentés dans cet article, vous n'avez pas à vous soucier des contraintes PK et FK. Mais si vous travaillez sur une grande base de données existante, vous les rencontrerez certainement.

Lorsque vous supprimez des données d'une table, vous pouvez également vouloir supprimer toutes les contraintes associées aux données de cette table. Consultez les exemples suivants si cela s'applique à vous :

  • Cet exemple vous montre comment supprimer une clé primaire.
  • Cet exemple vous montre comment supprimer une contrainte de clé étrangère.

Conservez la pertinence de vos données avec SQL DELETE

Voilà qui conclut notre examen complet de l'instruction SQL DELETE. Nous avons démontré sa syntaxe et exploré les utilisations potentielles de cette commande à travers plusieurs exemples.

Si vous souhaitez une formation SQL plus complète, consultez notre parcours d'apprentissage SQL de A à Z qui vous enseigne les bases avant de passer à des sujets plus avancés.