delete
est la suivante.
where
est facultative. S'il n'y en a pas, alors tout le contenu de la table passée en paramètre est effacé.
Une précaution élémentaire avant d'exécuter un
delete
est d'effectuer un
select
avec la même clause
where
. Cela permet de vérifier que les données qui vont être effacées sont bien les bonnes, et de prévenir d'éventuels désastres.
Notons que l'on peut effectuer des sous-requête dans la clause
where
d'une
delete
.
on cascade delete
, alors l'effacement est possible, et toutes les données qui référencent la donnée que l'on efface seront effacées aussi.
Ce mécanisme est très pratique à condition qu'il soit parfaitement maîtrisé. Dans le cas contraire, un effacement
a priori
anodin peut entrainer l'effacement de quantités d'autres données, sans qu'il soit réellement possible de prévoir lesquelles de façon simple. L'option
on cascade delete
est à manipuler avec les plus grandes précautions.
delete
suit une ordre très précis, très important dans certains cas. Le serveur procède en deux temps.
Tout d'abord, il commence par balayer la table à la recherche des lignes qui vérifient la condition indiquée. Il marque chacune de ces lignes, qui seront être effacées par la suite.
Dans un second temps, il efface les lignes marquées. Cet effacement peut d’ailleurs être un processus commun à toutes les tables, qui vide les données marquées à intervalles de temps réguliers.
Voyons sur un exemple pourquoi cette façon de faire est importante. Supposons que l'on veuille effacer les marins de notre table, dont l'âge est inférieur à l'âge moyen des marins.
Exemple 52. Effacement dont la clause dépend de ce qui est effacé
delete from Marins where ddmort - ddnaissance < (select avg(ddmort - ddnaissance) from Marins) ;