Partie I
SQL de base
182
© Éditions Eyrolles
Mises à jour
Il semblerait qu’on ne puisse insérer aucun enregistrement dans ces vues du fait de la cohérence qu’il faudrait établir du sens vue vers tables. Les messages d’erreur générés par MySQL
sont différents suivant la nature de la vue (monotable ou multitable). Nous verrons comment
résoudre l’erreur du deuxième cas.
On pourrait croire qu’il en est de même pour les modifications. Ce n’est pas le cas. Alors que
la vue monotable Moyenne_Heures_Pil n’est pas modifiable, ni par UPDATE ni par
DELETE (message d’erreur 1288), la vue multitable Pilotes_multi_AF est transformable
dans une certaine mesure, car la table Pilote (qui entre dans sa composition) est dite
« protégée par clé » (key preserved). Nous verrons dans le prochain paragraphe la signification de cette notion.
Figure 5-9 Vues complexes
Compagnie
comp
nrue rue
ville
nomComp
AF
124
Port Royal
Paris
Air France
SING
7
Camparols
Singapour
Singapore AL
Pilote
brevet
nom
nbHVol compa
PL-1
Louise Ente
450
AF
PL-2
Jules Ente
900
AF
PL-3
Paul Soutou
1000
SING
CREATE VIEW Pilotes_multi_AF
AS SELECT p.brevet, p.nom,
p.nbHVol, c.ville, c.nomComp
FROM Pilote p, Compagnie c
WHERE p.compa = c.comp AND p.compa = 'AF';
CREATE VIEW Moyenne_Heures_Pil
AS SELECT compa,
AVG(nbH Vol) moyenne
FROM Pilote GROUP BY compa;
compa
moyenne
AF
675
SING
1000
Tableau 5-17 Tentatives d’insertions dans des vues complexes
Vue monotable
Vue multitable
INSERT INTO Moyenne_Heures_Pil
VALUES ('TAT',50);
ERROR 1288 (HY000): The target
table Moyenne_Heures_Pil of the
INSERT is not updatable
INSERT INTO Pilotes_multi_AF VALUES
('PL-4','Test',400,'Castanet','Castanet AL');
ERROR 1394 (HY000): Can not insert into join
view 'bdsoutou.Pilotes_multi_AF' without
fields list
Web
SQL de base
182
© Éditions Eyrolles
Mises à jour
Il semblerait qu’on ne puisse insérer aucun enregistrement dans ces vues du fait de la cohérence qu’il faudrait établir du sens vue vers tables. Les messages d’erreur générés par MySQL
sont différents suivant la nature de la vue (monotable ou multitable). Nous verrons comment
résoudre l’erreur du deuxième cas.
On pourrait croire qu’il en est de même pour les modifications. Ce n’est pas le cas. Alors que
la vue monotable Moyenne_Heures_Pil n’est pas modifiable, ni par UPDATE ni par
DELETE (message d’erreur 1288), la vue multitable Pilotes_multi_AF est transformable
dans une certaine mesure, car la table Pilote (qui entre dans sa composition) est dite
« protégée par clé » (key preserved). Nous verrons dans le prochain paragraphe la signification de cette notion.
Figure 5-9 Vues complexes
Compagnie
comp
nrue rue
ville
nomComp
AF
124
Port Royal
Paris
Air France
SING
7
Camparols
Singapour
Singapore AL
Pilote
brevet
nom
nbHVol compa
PL-1
Louise Ente
450
AF
PL-2
Jules Ente
900
AF
PL-3
Paul Soutou
1000
SING
CREATE VIEW Pilotes_multi_AF
AS SELECT p.brevet, p.nom,
p.nbHVol, c.ville, c.nomComp
FROM Pilote p, Compagnie c
WHERE p.compa = c.comp AND p.compa = 'AF';
CREATE VIEW Moyenne_Heures_Pil
AS SELECT compa,
AVG(nbH Vol) moyenne
FROM Pilote GROUP BY compa;
compa
moyenne
AF
675
SING
1000
Tableau 5-17 Tentatives d’insertions dans des vues complexes
Vue monotable
Vue multitable
INSERT INTO Moyenne_Heures_Pil
VALUES ('TAT',50);
ERROR 1288 (HY000): The target
table Moyenne_Heures_Pil of the
INSERT is not updatable
INSERT INTO Pilotes_multi_AF VALUES
('PL-4','Test',400,'Castanet','Castanet AL');
ERROR 1394 (HY000): Can not insert into join
view 'bdsoutou.Pilotes_multi_AF' without
fields list
Web
