Partie I
SQL de base
78
© Éditions Eyrolles
extraits, il faudra statuer pour chacun d’eux entre une modification de telle ou telle colonne ou
bien une suppression. Il apparaît que quatre enregistrements ne respectent pas des contraintes.
Désactivez de nouveau l’intégrité référentielle avant de modifier les enregistrements ne vérifiant pas les contraintes, car, sinon, certaines modifications cohérentes ne pourraient avoir lieu
à cause de la vérification référentielle sur des valeurs erronées (dans notre exemple si on veut
modifier la compagnie 'GTI' du dernier affrètement, l’erreur portera sur la colonne immat).
Dans notre exemple, choisissons :
q
D’affecter la compagnie 'AF' aux avions appartenant à des compagnies non référencées
dans la table Avion. Notez qu’il faut compléter par deux espaces le code compagnie
(CHAR, inutile s’il avait été VARCHAR), et qu’on utilise la même requête que précédemment.
SET FOREIGN_KEY_CHECKS=0;
UPDATE Avion SET proprio =
WHERE proprio
;
q
De modifier la compagnie 'GTI' par la compagnie 'SING' dans la table Affreter et toute
immatriculation d’avion inexistant en 'F-GLFS'.
UPDATE Affreter SET compAff ='SING' WHERE compAff =
;
UPDATE Affreter SET immat='F-GLFS'
WHERE immat
;
Maintenant, il conviendra de réactiver l’intégrité référentielle. L’état de la base avec les
contraintes réactivées est le suivant (les mises à jour sont en gras) :
Tableau 3-4 Enregistrements posant problème
Table Avion
Table Affreter
mysql> SELECT immat,proprio FROM Avion
WHERE proprio NOT IN
(SELECT comp FROM Compagnie);
+--------+---------+
| immat | proprio |
+--------+---------+
| F-GLFS | Toto
|
+--------+---------+
mysql> SELECT compAff,immat,dateAff
FROM Affreter WHERE compAff NOT IN
(SELECT comp FROM Compagnie)
OR immat NOT IN
(SELECT immat FROM Avion);
+---------+--------+------------+
| compAff | immat | dateAff
|
+---------+--------+------------+
| GTI
| F-WTSS | 2005-11-07 |
| AF
| Toto
| 2005-05-13 |
| GTI
| Toto
| 2005-11-07 |
+---------+--------+------------+
'AF '
NOT IN (SELECT comp FROM Compagnie)
'GTI '
NOT IN (SELECT immat FROM Avion)
SQL de base
78
© Éditions Eyrolles
extraits, il faudra statuer pour chacun d’eux entre une modification de telle ou telle colonne ou
bien une suppression. Il apparaît que quatre enregistrements ne respectent pas des contraintes.
Désactivez de nouveau l’intégrité référentielle avant de modifier les enregistrements ne vérifiant pas les contraintes, car, sinon, certaines modifications cohérentes ne pourraient avoir lieu
à cause de la vérification référentielle sur des valeurs erronées (dans notre exemple si on veut
modifier la compagnie 'GTI' du dernier affrètement, l’erreur portera sur la colonne immat).
Dans notre exemple, choisissons :
q
D’affecter la compagnie 'AF' aux avions appartenant à des compagnies non référencées
dans la table Avion. Notez qu’il faut compléter par deux espaces le code compagnie
(CHAR, inutile s’il avait été VARCHAR), et qu’on utilise la même requête que précédemment.
SET FOREIGN_KEY_CHECKS=0;
UPDATE Avion SET proprio =
WHERE proprio
;
q
De modifier la compagnie 'GTI' par la compagnie 'SING' dans la table Affreter et toute
immatriculation d’avion inexistant en 'F-GLFS'.
UPDATE Affreter SET compAff ='SING' WHERE compAff =
;
UPDATE Affreter SET immat='F-GLFS'
WHERE immat
;
Maintenant, il conviendra de réactiver l’intégrité référentielle. L’état de la base avec les
contraintes réactivées est le suivant (les mises à jour sont en gras) :
Tableau 3-4 Enregistrements posant problème
Table Avion
Table Affreter
mysql> SELECT immat,proprio FROM Avion
WHERE proprio NOT IN
(SELECT comp FROM Compagnie);
+--------+---------+
| immat | proprio |
+--------+---------+
| F-GLFS | Toto
|
+--------+---------+
mysql> SELECT compAff,immat,dateAff
FROM Affreter WHERE compAff NOT IN
(SELECT comp FROM Compagnie)
OR immat NOT IN
(SELECT immat FROM Avion);
+---------+--------+------------+
| compAff | immat | dateAff
|
+---------+--------+------------+
| GTI
| F-WTSS | 2005-11-07 |
| AF
| Toto
| 2005-05-13 |
| GTI
| Toto
| 2005-11-07 |
+---------+--------+------------+
'AF '
NOT IN (SELECT comp FROM Compagnie)
'GTI '
NOT IN (SELECT immat FROM Avion)
