Mysql
 sql >> Base de données >  >> RDS >> Mysql

Vues MySQL

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 ...