© Éditions Eyrolles
179
chapitre n° 5
Contrôle des données
Vues en lecture seule
L’option ALGORITHM=TEMPTABLE déclare la vue non modifiable par INSERT, UPDATE, ou
DELETE.
Redéfinissons une vue des pilotes n’étant pas d’Air France à l’aide de cette option. Les messages d’erreur induits par la clause de lecture seule, générés par MySQL, sont très parlants.
Vues modifiables
Lorsqu’il est possible d’exécuter des instructions INSERT, UPDATE ou DELETE sur une vue,
cette dernière est dite « modifiable » (updatable view). Vous pouvez créer une vue qui est
modifiable intrinsèquement.
Pour mettre à jour une vue, il doit exister une correspondance biunivoque entre les lignes de la
vue et celles de l’objet source. De plus certaines conditions doivent être remplies.
Si une vue n’est pas modifiable en soi, il n’est pas encore possible de programmer un déclencheur de type instead of qui prenne le pas sur l’instruction de modification de la vue, en spécifiant un bloc d’instructions à effectuer à la place. Les mises à jour de la vue seraient ainsi
automatiquement répercutées au niveau d’une ou de plusieurs tables. Notons que ce type de
déclencheur n’est arrivé qu’assez tardivement sous Oracle, DB2 et SQL Server.
Tableau 5-13 Vue d’une vue
Création
Contenu de la vue
CREATE OR REPLACE VIEW
EtatCivilPilotesPasAF
AS SELECT nomPil,heuresPil,adressePil
FROM
;
+---------+-----------+------------+
| nomPil | heuresPil | adressePil |
+---------+-----------+------------+
| Soutou |
890.00 | Castanet
|
| Laroche |
500.00 | Montauban |
| Bidal
|
120.00 | Paris
|
| Labat
|
120.00 | Pau
|
| Tauzin |
100.00 | Bas-Mauco |
+---------+-----------+------------+
Web
PilotesPasAF
Tableau 5-14 Vue en lecture seule
Création
Opérations impossibles
CREATE OR REPLACE
VIEW
PilotesPasAFRO
AS
SELECT *
FROM Pilote
WHERE NOT (compa = 'AF');
INSERT INTO PilotesPasAFRO
VALUES ('PL-8','Ferry',5,'Paris','ASO');
ERROR 1288 (HY000): The target table
PilotesPasAFRO of the INSERT is not updatable
UPDATE PilotesPasAFRO SET nbHvol=nbHvol+2;
ERROR 1288 (HY000): The target table
PilotesPasAFRO of the UPDATE is not updatable
DELETE FROM PilotesPasAFRO;
ERROR 1288 (HY000): The target table
PilotesPasAFRO of the DELETE is not updatable
Web
ALGORITHM=TEMPTABLE
Précédent

- 201/418

Suivant