DELETE : Supprimer des enregistrements d'une table MySQL

Noter ce cours :

Liens sponsorisés :

DELETE FROM : Supprimer des données d'une table MySQL

Dans l'article précédent, nous avons vu comment mettre à jour les données d'une table MySQL. Voyons maintenant comment supprimer ces données.

Pour supprimer des données en MySQL (et plus généralement en SQL), vous devrez utiliser la commande DELETE FROM. Celle-ci permet de supprimer des enregistrements. Bien entendu, vous allez pouvoir spécifier quels enregistrements vous souhaiterez supprimer, au moyen de conditions.

Nous reprendrons notre exemple vu dans l'article précédent de la table des membres dont voici (pour rappel) la structure :

structure SQL de la table membres

Si vous souhaitez reproduire cette table, vous pouvez exécuter le code SQL suivant (un outil tel que PHPMyAdmin est recommandé car plus pratique) :

CREATE TABLE IF NOT EXISTS `membres` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pseudo` varchar(30) NOT NULL,
  `passe` varchar(40) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

Voici les quelques données qui figurent dans notre table membres :

Données présentes dans la table membres

Vous pouvez les insérer en exécutant les requêtes suivantes :

INSERT INTO `membres` (`id`, `pseudo`, `passe`, `email`) VALUES
(1, 'Pierre', 'fe1fb20ff84babba7e6ea3dcc4d1ad541d52a675', 'pierre@dupont.fr'),
(2, 'Dupont', 'ff019a5748a52b5641624af88a54a2f0e46a9fb5', 'dupont@etdupont.fr');

Syntaxe de la requête DELETE

La syntaxe de la requête DELETE est assez simple, elle commence par DELETE FROM et est suivie du nom de la table, puis de la condition de suppression.

Attention : si vous ne mettez pas de condition, vous viderez toute la table !

Imaginions que nous souhaitions supprimer le membre dont l'identifiant (champ id) vaut 1. La requête est alors la suivante :

DELETE FROM `membres` WHERE `id`=1;

Pour supprimer tous les membres, la requête est utilisée sans condition WHERE :

DELETE FROM `membres`;
Attention ! la requête DELETE FROM table ne réinitialise pas les valeurs d'auto-incrément. Si vous insérez un nouveau membre, son identifiant unique ne sera pas 1 mais le nombre qu'il aurait été avec la table contenant l'ensemble des enregistrements précédents.

Syntaxe de la requête TRUNCATE

Pour effacer l'ensemble des enregistrements d'une table et réinitialiser les valeurs d'auto-incrément, vous pouvez utiliser la syntaxe TRUNCATE TABLE table. Pour la table membres, cela donnerait la syntaxe suivante :

TRUNCATE TABLE `membres`;
Attention : si votre table contient des clés étrangères, vous pourriez avoir une erreur de suppression des enregistrements. Vous devrez alors utiliser la syntaxe ci-dessous pour ne pas vérifier l'intégrité durant l'opération de suppression de la table.
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `membres`;
SET FOREIGN_KEY_CHECKS=1;

Vous pourriez être tentés d'utiliser TRUNCATE à chaque fois que vous souhaitez vider une table. Attention, si vous utilisez les clés étrangères, vous pourriez avoir des erreurs qui vous empêchent de supprimer les enregistrements.

TRUNCATE TABLE ne respecte pas les transactions mais vous permet d'accélérer la suppression des enregistrements, elle peut être plus rapide qu'un simple DELETE FROM `membres`.

Vous avez aimé cet article intitulé DELETE : Supprimer des enregistrements d'une table MySQL ? Partagez-le !
Vulgarisation-informatique.com
Cours en informatique & tutoriels