Partie I
SQL de base
180
© Éditions Eyrolles
Pour qu’une vue simple soit modifiable, sa requête de définition doit respecter les critères suivants :
• pas de directive DISTINCT, de fonction (AVG, COUNT, MAX, MIN, SUM, ou VARIANCE),
d’expression dans le SELECT ;
• pas de GROUP BY, ORDER BY ou HAVING.
Dans notre exemple, nous constatons qu’il sera quand même possible d’ajouter un pilote à la vue
Etat_civil, bien que la clé primaire de la table source ne soit pas renseignée. MySQL insère à
la place, en l’absence de valeur par défaut de la clé primaire, la chaîne vide (' ') ; si la clé avait
été une séquence, les insertions se feraient normalement. Cette opération ne pourra donc se faire
qu’une seule fois, après, cela sera contradictoire avec la condition de correspondance biunivoque.
En revanche, il sera possible de modifier les colonnes de cette vue. On pourra aussi ajouter,
modifier (sous réserve de respecter les éventuelles contraintes issues des colonnes de la table
source), ou supprimer des pilotes en passant par la vue PilotesAF.
La dernière instruction est paradoxale, car elle permet d’ajouter un pilote de la compagnie
'ASO' en passant par la vue des pilotes de la compagnie 'AF'. La directive WITH CHECK
OPTION permet d’éviter ces effets de bord indésirables pour l’intégrité de la base.
Tableau 5-15 Mises à jour de vues
Opérations possibles
Opérations non conseillées et impossibles
Suppression des pilotes de ASO
DELETE FROM
WHERE compa = 'ASO';
Le pilote Lamothe double ses heures
UPDATE
SET nbHVol = nbHVol*2
WHERE nom = 'Lamothe';
Ajout d’un pilote (pas conseillé)
INSERT INTO
VALUES
('Raffarin',10,'Poitiers','ASO') ;
Ajout d’un autre pilote impossible
INSERT INTO Etat_civil VALUES
('Lebur',20,'Bordeaux','ASO');
ERROR 1062 (23000): Duplicate entry
'' for key 1
Ajout d’un pilote
INSERT INTO
VALUES
('PL-8','Ferry',5, 'Paris','AF');
Modification
UPDATE
SET nbHVol = nbHVol*2;
Suppression
DELETE FROM
WHERE nom='Ferry';
Ajout d’un pilote qui n’est pas de 'AF' !
INSERT INTO
VALUES
('PL-9','Caboche', 600,'Rennes','ASO');
Toute mise à jour qui ne respecterait pas les
contraintes de la table Pilote.
Web
Etat_civil
Etat_civil
Etat_civil
PilotesAF
PilotesAF
PilotesAF
PilotesAF
SQL de base
180
© Éditions Eyrolles
Pour qu’une vue simple soit modifiable, sa requête de définition doit respecter les critères suivants :
• pas de directive DISTINCT, de fonction (AVG, COUNT, MAX, MIN, SUM, ou VARIANCE),
d’expression dans le SELECT ;
• pas de GROUP BY, ORDER BY ou HAVING.
Dans notre exemple, nous constatons qu’il sera quand même possible d’ajouter un pilote à la vue
Etat_civil, bien que la clé primaire de la table source ne soit pas renseignée. MySQL insère à
la place, en l’absence de valeur par défaut de la clé primaire, la chaîne vide (' ') ; si la clé avait
été une séquence, les insertions se feraient normalement. Cette opération ne pourra donc se faire
qu’une seule fois, après, cela sera contradictoire avec la condition de correspondance biunivoque.
En revanche, il sera possible de modifier les colonnes de cette vue. On pourra aussi ajouter,
modifier (sous réserve de respecter les éventuelles contraintes issues des colonnes de la table
source), ou supprimer des pilotes en passant par la vue PilotesAF.
La dernière instruction est paradoxale, car elle permet d’ajouter un pilote de la compagnie
'ASO' en passant par la vue des pilotes de la compagnie 'AF'. La directive WITH CHECK
OPTION permet d’éviter ces effets de bord indésirables pour l’intégrité de la base.
Tableau 5-15 Mises à jour de vues
Opérations possibles
Opérations non conseillées et impossibles
Suppression des pilotes de ASO
DELETE FROM
WHERE compa = 'ASO';
Le pilote Lamothe double ses heures
UPDATE
SET nbHVol = nbHVol*2
WHERE nom = 'Lamothe';
Ajout d’un pilote (pas conseillé)
INSERT INTO
VALUES
('Raffarin',10,'Poitiers','ASO') ;
Ajout d’un autre pilote impossible
INSERT INTO Etat_civil VALUES
('Lebur',20,'Bordeaux','ASO');
ERROR 1062 (23000): Duplicate entry
'' for key 1
Ajout d’un pilote
INSERT INTO
VALUES
('PL-8','Ferry',5, 'Paris','AF');
Modification
UPDATE
SET nbHVol = nbHVol*2;
Suppression
DELETE FROM
WHERE nom='Ferry';
Ajout d’un pilote qui n’est pas de 'AF' !
INSERT INTO
VALUES
('PL-9','Caboche', 600,'Rennes','ASO');
Toute mise à jour qui ne respecterait pas les
contraintes de la table Pilote.
Web
Etat_civil
Etat_civil
Etat_civil
PilotesAF
PilotesAF
PilotesAF
PilotesAF
