© Éditions Eyrolles
55
chapitre n° 2
Manipulation des données
q
QUICK (pour les tables de type MyISAM) ne met pas à jour les index associés pour accélérer
le traitement.
q
La condition du WHERE sélectionne les lignes à supprimer dans la table. Si aucune condition n’est précisée, toutes les lignes seront détruites. Si la condition ne sélectionne aucune
ligne, aucun enregistrement ne sera supprimé.
q
ORDER BY réalise un tri des enregistrements qui seront effacés dans cet ordre.
Détaillons les possibilités de cette instruction en considérant les différentes tables précédemment définies. La première commande supprime tous les pilotes de la compagnie de code 'AF',
la seconde, avec une autre écriture, détruit la compagnie de code 'AF'.
DELETE FROM Pilote WHERE compa = 'AF';
DELETE FROM Compagnie WHERE comp = 'AF';
Tentons de supprimer une compagnie qui est référencée par un pilote à l’aide d’une clé étrangère. Il s’affiche une erreur qui sera expliquée dans la section Intégrité référentielle.
mysql> DELETE FROM Compagnie WHERE comp = 'SING';
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign
key constraint fails (`bdsoutou/pilote`, CONSTRAINT `fk_Pil_compa_
Comp` FOREIGN KEY (`compa`) REFERENCES `compagnie` (`comp`))
Détruisons enfin les deux premières compagnies (triées par ordre croissant de clé, ici 'AC' et
'AN1') qui ne sont référencées par aucun pilote.
DELETE FROM Compagnie LIMIT 2;
Instruction TRUNCATE
La commande TRUNCATE est une extension de SQL qui a été proposée par Oracle et reprise
par MySQL. Cette commande supprime tous les enregistrements d’une table et libère éventuellement l’espace de stockage utilisé par la table. La syntaxe est la suivante :
TRUNCATE [TABLE] [nomBase.] nomTable;
Avec le moteur InnoDB, l’opération est programmée en DELETE. Pour les autres moteurs,
l’opération diffère de DELETE de la manière suivante :
q
La table est supprimée (DROP) puis recréée (CREATE), ce qui est plus rapide que de
détruire les enregistrements un à un.
q
L’opération peut être interrompue si une transaction active utilise la table (ou si un verrou
est posé).
q
Le nombre d’enregistrements supprimés n’est pas retourné.
q
L’éventuelle dernière valeur d’une colonne AUTO_INCREMENT n’est pas mémorisée.
Web
55
chapitre n° 2
Manipulation des données
q
QUICK (pour les tables de type MyISAM) ne met pas à jour les index associés pour accélérer
le traitement.
q
La condition du WHERE sélectionne les lignes à supprimer dans la table. Si aucune condition n’est précisée, toutes les lignes seront détruites. Si la condition ne sélectionne aucune
ligne, aucun enregistrement ne sera supprimé.
q
ORDER BY réalise un tri des enregistrements qui seront effacés dans cet ordre.
Détaillons les possibilités de cette instruction en considérant les différentes tables précédemment définies. La première commande supprime tous les pilotes de la compagnie de code 'AF',
la seconde, avec une autre écriture, détruit la compagnie de code 'AF'.
DELETE FROM Pilote WHERE compa = 'AF';
DELETE FROM Compagnie WHERE comp = 'AF';
Tentons de supprimer une compagnie qui est référencée par un pilote à l’aide d’une clé étrangère. Il s’affiche une erreur qui sera expliquée dans la section Intégrité référentielle.
mysql> DELETE FROM Compagnie WHERE comp = 'SING';
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign
key constraint fails (`bdsoutou/pilote`, CONSTRAINT `fk_Pil_compa_
Comp` FOREIGN KEY (`compa`) REFERENCES `compagnie` (`comp`))
Détruisons enfin les deux premières compagnies (triées par ordre croissant de clé, ici 'AC' et
'AN1') qui ne sont référencées par aucun pilote.
DELETE FROM Compagnie LIMIT 2;
Instruction TRUNCATE
La commande TRUNCATE est une extension de SQL qui a été proposée par Oracle et reprise
par MySQL. Cette commande supprime tous les enregistrements d’une table et libère éventuellement l’espace de stockage utilisé par la table. La syntaxe est la suivante :
TRUNCATE [TABLE] [nomBase.] nomTable;
Avec le moteur InnoDB, l’opération est programmée en DELETE. Pour les autres moteurs,
l’opération diffère de DELETE de la manière suivante :
q
La table est supprimée (DROP) puis recréée (CREATE), ce qui est plus rapide que de
détruire les enregistrements un à un.
q
L’opération peut être interrompue si une transaction active utilise la table (ou si un verrou
est posé).
q
Le nombre d’enregistrements supprimés n’est pas retourné.
q
L’éventuelle dernière valeur d’une colonne AUTO_INCREMENT n’est pas mémorisée.
Web
