© Éditions Eyrolles
61
chapitre n° 2
Manipulation des données
Le tableau suivant décrit quelques alternatives de cohérence à notre base de données exemple
entre les tables Avion et Affreter puis Pilote et Compagnie.
Pour l’heure, aucun déclencheur ne peut être activé suite à la modification d’une colonne
induite d’une action de répercussion (CASCADE ou SET NULL).
MySQL ne permet pas encore de propager une valeur par défaut (set default) comme la norme
SQL le prévoit.
Tableau 2-16 Alternatives de cohérence du « père » vers les « fils »
Alternatives
Syntaxe / Message d’erreur
Prévenir la modification de
l’immatriculation d’un avion ou
la suppression d’un avion.
--dans Affreter
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat)
ON DELETE NO ACTION ON UPDATE NO ACTION
mysql> DELETE FROM Avion;
ERROR 1451 (23000): Cannot delete or update a
parent row: a foreign key constraint fails
(`bdsoutou/affreter`, CONSTRAINT `fk_Aff_na_Avion`
FOREIGN KEY (`immat`) REFERENCES `avion` (`immat`)
ON DELETE NO ACTION ON UPDATE NO ACTION)
Propager la suppression
d’un avion.
--dans Affreter
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat)
ON DELETE CASCADE
Propager la modification de
l’immatriculation d’un avion.
--dans Affreter
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat)
ON UPDATE CASCADE
Propager la modification du
code de la compagnie dans
les tables Pilote, Avion et
Affreter. Affecter la valeur
nulle dans la table Pilote
suite à la suppression d’une
compagnie, tout en préservant
l’intégrité avec la table Avion.
--dans Affreter
CONSTRAINT fk_Aff_comp_Compag
FOREIGN KEY(compAff) REFERENCES Compagnie(comp)
ON UPDATE CASCADE
--dans Avion
CONSTRAINT fk_Avion_comp_Compag
FOREIGN KEY(proprio) REFERENCES Compagnie(comp)
ON UPDATE CASCADE
--dans Pilote
CONSTRAINT fk_Pil_compa_Comp
FOREIGN KEY (compa) REFERENCES Compagnie(comp)
ON DELETE SET NULL ON UPDATE CASCADE
Web
61
chapitre n° 2
Manipulation des données
Le tableau suivant décrit quelques alternatives de cohérence à notre base de données exemple
entre les tables Avion et Affreter puis Pilote et Compagnie.
Pour l’heure, aucun déclencheur ne peut être activé suite à la modification d’une colonne
induite d’une action de répercussion (CASCADE ou SET NULL).
MySQL ne permet pas encore de propager une valeur par défaut (set default) comme la norme
SQL le prévoit.
Tableau 2-16 Alternatives de cohérence du « père » vers les « fils »
Alternatives
Syntaxe / Message d’erreur
Prévenir la modification de
l’immatriculation d’un avion ou
la suppression d’un avion.
--dans Affreter
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat)
ON DELETE NO ACTION ON UPDATE NO ACTION
mysql> DELETE FROM Avion;
ERROR 1451 (23000): Cannot delete or update a
parent row: a foreign key constraint fails
(`bdsoutou/affreter`, CONSTRAINT `fk_Aff_na_Avion`
FOREIGN KEY (`immat`) REFERENCES `avion` (`immat`)
ON DELETE NO ACTION ON UPDATE NO ACTION)
Propager la suppression
d’un avion.
--dans Affreter
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat)
ON DELETE CASCADE
Propager la modification de
l’immatriculation d’un avion.
--dans Affreter
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat)
ON UPDATE CASCADE
Propager la modification du
code de la compagnie dans
les tables Pilote, Avion et
Affreter. Affecter la valeur
nulle dans la table Pilote
suite à la suppression d’une
compagnie, tout en préservant
l’intégrité avec la table Avion.
--dans Affreter
CONSTRAINT fk_Aff_comp_Compag
FOREIGN KEY(compAff) REFERENCES Compagnie(comp)
ON UPDATE CASCADE
--dans Avion
CONSTRAINT fk_Avion_comp_Compag
FOREIGN KEY(proprio) REFERENCES Compagnie(comp)
ON UPDATE CASCADE
--dans Pilote
CONSTRAINT fk_Pil_compa_Comp
FOREIGN KEY (compa) REFERENCES Compagnie(comp)
ON DELETE SET NULL ON UPDATE CASCADE
Web
