UNION ;
une sous-requête dans la clause SELECT.
Modification des données d'une vue
On a tendance à penser que les vues ne servent que pour la sélection de données. En réalité, il est possible de modifier, insérer et
supprimer des données par l'intermédiaire d'une vue.
Les requêtes sont les mêmes que pour insérer, modifier et supprimer des données à partir d'une table (si ce n'est qu'on met le nom
de la vue au lieu du nom de la table bien sûr).
Cependant, pour qu'une vue ne soit pas en "lecture seule", elle doit répondre à une série de conditions.
Conditions pour qu'une vue permette de modifier des données (requêtes
UPDATE)
Jointures
Il est possible de modifier des données à partir d'une vue définie avec une jointure, à condition de ne modifier qu'une seule table.
Exemple
Code : SQL
-- Modifie Animal
UPDATE V_Animal_details
SET commentaires = 'Rhume chronique'
WHERE id = 21;
-- Modifie Race
UPDATE V_Animal_details
SET race_nom = 'Maine Coon'
WHERE race_nom = 'Maine coon';
-- Erreur
UPDATE V_Animal_details
SET commentaires = 'Vilain oiseau', espece_nom = 'Perroquet pas
beau' -- commentaires vient de Animal, et espece_nom vient de
Espece
WHERE espece_id = 4;
Les deux premières modifications ne posent aucun problème, mais la troisième échouera, car elle modifie des colonnes
appartenant à deux tables différentes.
Code : Console
ERROR 1393 (HY000): Can not modify more than one base table through a join view 'elevage.
Algorithme
La vue doit utiliser l'algorithme MERGE (que l'algorithme ait été spécifié à la création, ou choisi par MySQL si l'algorithme n'a pas
été défini). Par conséquent, les mêmes conditions que pour utiliser l'algorithme MERGE s'appliquent. Les éléments suivants sont
ainsi interdits dans une vue si l'on veut pouvoir modifier les données à partir de celle-ci :
DISTINCT ;
LIMIT ;
une fonction d’agrégation (SUM(), COUNT(), MAX(), etc.) ;
GROUP BY ;
HAVING ;
UNION ;
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
345/414
www.openclassrooms.com
Précédent

- 345/413

Suivant