Ici, j'explique ce que sont les "vues" MySQL et comment les utiliser.
MySQL nous offre la possibilité de créer des vues . Une vue est défini comme une requête stockée qui, lorsqu'elle est invoquée, produit un ensemble de résultats. Certaines personnes appellent les vues des "tables virtuelles".
Clair comme de la boue? Essayons à nouveau.
Qu'est-ce qu'une vue ?
Une vue est une requête que vous enregistrez dans la base de données. Vous pouvez ensuite l'exécuter ultérieurement en appelant simplement cette vue (plutôt que d'écrire à nouveau la requête).
La vue peut consister en une requête complexe, mais elle présentera les résultats comme s'il s'agissait d'un tableau. Par conséquent, vous pouvez interroger la vue comme s'il s'agissait d'une table.
Par exemple, vous pouvez avoir une requête complexe qui sélectionne des données dans trois tables différentes. Vous pouvez soit taper cette requête complexe chaque fois que vous devez l'exécuter, soit enregistrer la requête en tant que vue. Une fois qu'il a été enregistré en tant que vue, vous pouvez alors exécuter un simple SELECT
pour renvoyer les résultats de la requête complexe. Mais bien sûr, vous pouvez également écrire une requête complexe sur la vue si nécessaire.
Créer une vue
La création de vues est très simple. Vous faites simplement précéder votre requête d'une ligne de code et l'exécutez. La vue sera immédiatement créée dans votre base de données.
Syntaxe
Pour créer une vue, saisissez l'instruction suivante, suivie de la requête :
CREATE VIEW view_name AS
Remplacez view_name avec le nom que vous souhaitez utiliser pour la vue.
Exemple
Si nous exécutons le code suivant sur FruitShop base de données :
CREATE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Nous voyons maintenant une vue appelée vFruitInventory répertorié sous Vues (vous devrez peut-être cliquer sur Actualiser bouton pour les SCHEMAS menu en premier) :
C'est une bonne idée de penser à une convention de nommage pour vos vues (comme pour tout autre objet de base de données) et de s'y tenir. De nombreux développeurs préfixent leurs noms de vue avec v
, vw
, v_
ou vw_
de sorte qu'il est plus facile de distinguer les vues des tables dans leurs requêtes. Cependant, d'autres développeurs ne sont pas d'accord avec cette convention et préfèrent que leurs noms de table et de vue soient interchangeables.
Interroger une vue
Nous pouvons maintenant interroger la vue comme nous interrogerions une table :
SELECT * FROM vFruitInventory;
Résultat :
Bien sûr, nous pouvons également utiliser une requête plus spécifique. Par exemple, celui-ci qui ne sélectionne que les enregistrements dont l'inventaire est supérieur ou inférieur à 10 :
SELECT FruitName FROM vFruitInventory WHERE Inventory <= 10;
Mais nous ne pouvons pas interroger les colonnes qui ne sont pas référencées dans la vue (même si elles se trouvent dans les tables sous-jacentes que la vue interroge).
Par exemple, nous pouvons interroger le Fruit tableau comme celui-ci :
SELECT * FROM Fruit WHERE FruitId = 1;
Mais nous ne pouvons pas interroger le vFruitInventory ci-dessus afficher comme ceci :
SELECT * FROM vFruitInventory WHERE FruitId = 1;
C'est parce que la vue ne renvoie pas le FruitId colonne. Nous avons spécifié les colonnes exactes dans la vue et ce sont toutes celles qui sont renvoyées. Comme mentionné, le jeu de résultats de la vue est comme une table et certains aiment l'appeler une "table virtuelle". Si la "table" n'inclut pas ces colonnes, vous ne pouvez pas les interroger.
Plutôt que d'être une limitation, il s'agit en fait d'une fonctionnalité de vues. Cette fonctionnalité signifie que nous pouvons accorder aux utilisateurs l'accès à certains colonnes d'une table mais pas les autres (via la vue). En d'autres termes, nous pouvons accorder à un utilisateur l'accès à une vue sans accorder à cet utilisateur l'accès aux tables sous-jacentes auxquelles la vue accède. Certaines tables peuvent stocker des informations sensibles auxquelles l'utilisateur n'est pas autorisé à accéder. Mais les mêmes tables peuvent également stocker des informations non sensibles dont elles ont besoin accéder. Que faire? Créez une vue ! Et cette vue ne peut sélectionner que les informations non sensibles de ces tables.
Modifier une vue
Voici deux méthodes différentes pour modifier votre vue.
Option 1 :Utiliser ALTER VIEW
Déclaration
Vous pouvez modifier une vue en utilisant ALTER VIEW
déclaration. Comme ceci :
ALTER VIEW view_name AS
Remplacez view_name avec le nom de la vue que vous souhaitez modifier.
Exemple
Ajoutons le Fruit.FruitId champ à la vue :
ALTER VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Maintenant, lorsque nous essayons de renvoyer le FruitId champ dans nos requêtes, nous obtiendrons des résultats.
Mais notez que nous ne pouvons pas essayer d'accéder à ce champ en tant que Fruit.FruitId
. Nous ne pouvons y accéder qu'en tant que FruitId
. Et c'est comme ça que ça devrait être. Après tout, la vue est une "table virtuelle" et nous n'avons pas besoin de connaître la structure des tables qu'elle interroge.
Option 2 :utilisez CREATE OR REPLACE
Notez que la vue doit exister avant que vous n'exécutiez ALTER VIEW
déclaration. S'il n'existe pas, vous recevrez une erreur. Vous pouvez éviter ce problème en utilisant un CREATE OR REPLACE
déclaration. Cela créera la vue si elle n'existe pas, ou la remplacera si elle existe.
Nous aurions donc pu créer la vue ci-dessus comme ceci :
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Et ensuite nous pourrions le mettre à jour en utilisant le même CREATE OR REPLACE
déclaration, mais en modifiant simplement la définition. Par exemple, en ajoutant le Fruit.FruitId
champ :
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Supprimer une vue
Vous pouvez déposer une vue en utilisant le DROP VIEW
déclaration. Comme ceci :
DROP VIEW vFruitInventory
La déclaration ci-dessus supprimera la vue appelée vFruitInventory .
Supprimer plusieurs vues
Vous pouvez supprimer plusieurs vues en utilisant le même DROP VIEW
déclaration. Séparez simplement chaque nom de vue par une virgule. Comme ceci :
DROP VIEW view_1, view_2 ...
Le IF EXISTS
Article
Vous pouvez également utiliser le IF EXISTS
clause pour éviter qu'une erreur ne se produise si une vue n'existe pas :
DROP VIEW IF EXISTS view_1, view_2 ...