Recherche…
Syntaxe
CREATE VIEW nom_vue AS SELECT nom_colonne (s) FROM nom_table WHERE condition; /// Syntaxe de création simple
CRÉER [OU REMPLACER] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = {utilisateur | CURRENT_USER}] [SÉCURITÉ SQL {DEFINER | INVOKER}] VIEW nom_vue [(liste_colonnes)] AS select_statement [AVEC [CASCADED | LOCAL] OPTION DE VÉRIFICATION]; /// Syntaxe complète de la vue
DROP VIEW [SI EXISTE] [nom_base.] Nom_vue; /// Syntaxe de la vue déroulante
Paramètres
Paramètres | Détails |
---|---|
nom_vue | Nom de la vue |
Instruction SELECT | Instructions SQL à emballer dans les vues. Il peut s'agir d'une instruction SELECT pour extraire des données d'une ou de plusieurs tables. |
Remarques
Les vues sont des tables virtuelles et ne contiennent pas les données renvoyées. Ils peuvent vous éviter d'écrire des requêtes complexes à plusieurs reprises.
- Avant qu'une vue soit faite, sa spécification consiste entièrement en une
SELECT
. L'SELECT
ne peut pas contenir de sous-requête dans la clause FROM. - Une fois vue est fait , il est utilisé en grande partie comme une table et peut être
SELECT
ed d' un peu comme une table.
Vous devez créer des vues, lorsque vous souhaitez restreindre quelques colonnes de votre table, à partir de l'autre utilisateur.
- Par exemple: Dans votre organisation, vous voulez que vos responsables consultent peu d’informations à partir d’une table nommée «Ventes», mais vous ne voulez pas que vos ingénieurs logiciels puissent voir tous les champs de la table «Ventes». Ici, vous pouvez créer deux vues différentes pour vos responsables et vos ingénieurs logiciels.
Performance VIEWs
sont du sucre syntaxique. Cependant, les performances peuvent être inférieures ou égales à la requête équivalente avec la sélection de la vue intégrée. L'Optimiseur tente de faire cela "plié" pour vous, mais ne réussit pas toujours. MySQL 5.7.6 fournit d'autres améliorations dans l'Optimizer. Mais, peu importe , en utilisant une VIEW
ne génère pas une requête plus rapide.
Créer une vue
Les privilèges
L'instruction CREATE VIEW requiert le privilège CREATE VIEW pour la vue et certains privilèges pour chaque colonne sélectionnée par l'instruction SELECT. Pour les colonnes utilisées ailleurs dans l'instruction SELECT, vous devez disposer du privilège SELECT. Si la clause OR REPLACE est présente, vous devez également disposer du privilège DROP pour la vue. CREATE VIEW peut également nécessiter le privilège SUPER, en fonction de la valeur DEFINER, comme décrit plus loin dans cette section.
Lorsqu'une vue est référencée, la vérification des privilèges se produit.
Une vue appartient à une base de données. Par défaut, une nouvelle vue est créée dans la base de données par défaut. Pour créer la vue explicitement dans une base de données donnée, utilisez un nom complet
Par exemple:
db_name.view_name
mysql> CREATE VIEW test.v AS SELECT * FROM t;
Remarque - Dans une base de données, les tables de base et les vues partagent le même espace de noms. Par conséquent, une table de base et une vue ne peuvent pas porter le même nom.
Une vue peut:
- être créé à partir de nombreux types d'instructions SELECT
- se référer aux tables de base ou à d'autres vues
- utiliser des jointures, UNION et des sous-requêtes
- SELECT n'a même pas besoin de faire référence à des tables
Un autre exemple
L'exemple suivant définit une vue qui sélectionne deux colonnes d'une autre table, ainsi qu'une expression calculée à partir de ces colonnes:
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
Restrictions
- Avant MySQL 5.7.7, l'instruction SELECT ne pouvait pas contenir de sous-requête dans la clause FROM.
- L'instruction SELECT ne peut pas faire référence à des variables système ou à des variables définies par l'utilisateur.
- Dans un programme stocké, l'instruction SELECT ne peut pas faire référence à des paramètres de programme ou à des variables locales.
- L'instruction SELECT ne peut pas faire référence à des paramètres d'instruction préparés.
- Toute table ou vue mentionnée dans la définition doit exister. Une fois la vue créée, il est possible de supprimer une table ou une vue
la définition se réfère à. Dans ce cas, l'utilisation de la vue entraîne une erreur. Pour vérifier une définition de vue pour des problèmes de ce type, utilisez l'instruction CHECK TABLE. - La définition ne peut pas faire référence à une table TEMPORARY et vous ne pouvez pas
créer une vue TEMPORAIRE. - Vous ne pouvez pas associer un déclencheur à une vue.
- Les alias pour les noms de colonne dans l'instruction SELECT sont vérifiés par rapport à la longueur de colonne maximale de 64 caractères (pas l'alias maximum
longueur de 256 caractères). - Une
VIEW
peut ou ne peut pas optimiser ainsi que l'équivalentSELECT
. Il est peu probable d'optimiser mieux.
Une vue de deux tables
Une vue est très utile lorsqu'elle peut être utilisée pour extraire des données de plusieurs tables.
CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a
LEFT OUTER JOIN other_table b
ON a.id = b.id
Dans mysql, les vues ne sont pas matérialisées. Si vous exécutez maintenant la requête simple SELECT * FROM myview
, mysql exécutera réellement la LEFT JOIN en arrière-plan.
Une vue une fois créée peut être jointe à d'autres vues ou tableaux
Mise à jour d'une table via une vue
A VIEW
comporte comme une table. Bien que vous pouvez UPDATE
À UPDATE
une table, vous pouvez ou ne pas être en mesure de mettre à jour une vue sur cette table. En général, si le SELECT
dans la vue est suffisamment complexe pour nécessiter une table temporaire, alors UPDATE
n'est pas autorisé.
Des éléments tels que GROUP BY
, UNION
, HAVING
, DISTINCT
et certaines sous-requêtes empêchent la mise à jour de la vue. Détails dans le manuel de référence .
DROPPING A VIEW
- Créer et supprimer une vue dans la base de données actuelle.
CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;
- Créer et supprimer une vue référençant une table dans une base de données différente.
CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;