DELETE : Supprimer des enregistrements d'une table MySQL
Noter ce cours :
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 :
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 :
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.
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`;
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`;
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`.