Comprendre les vues SQL dans MySQL : définition, création et manipulation

1. Définition d'une vue SQL

Une vue, également appelée table virtuelle, est une représentation logique d’un ensemble de données. Elle repose sur une requête SELECT stockée dans la base, à laquelle on donne un nom. La vue elle‑même ne contient aucune donnée physique ; elle conserve uniquement la définition de la requête. Lorsque les données des tables sous‑jacentes (les tables de base) changent, les données visibles à travers la vue se mettent automatiquement à jour.

Caractéristiques principales :

  • Virtualité : la vue n’occupe qu’un espace négligeable car elle ne stocke que la requête, pas les données.
  • Indépendance des données : elle offre une couche d’abstraction qui protège les applications des modifications structurelles des tables de base.
  • Sécurité : en exposant seulement certaines colonnes ou lignes, la vue limite l’accès aux données sensibles.
  • Simplification des requêtes complexes : une vue encapsule des jointures ou des agrégations, rendant l’interrogation plus simple pour l’utilisateur final.

Relation entre une vue et ses tables de base :

  • Les modifications apportées via une vue (INSERT, UPDATE, DELETE) se répercutent sur les tables de base, sous réserve des restrictions de mise à jour.
  • Inversement, toute modification des tables de base est immédiatement reflétée dans la vue.
  • Attention : une vue n’est pas toujours modifiable. Par exemple, une vue contenant DISTINCT, GROUP BY, des fonctions d’agrégation ou des sous‑requêtes n’est généralement pas mise à jour.

2. Création et utilisation d’une vue

2.1. Préparation de l’environnement

Téléchargez le fichier hr_data.sql depuis un dépôt fiable. Ce fichier contient les instructions SQL nécessaires pour recréer une base de données de démonstration. Inspectez son contenu :

vim hr_data.sql

Importez‑le dans MySQL en utilisant la commande source :

source /chemin/absolu/vers/hr_data.sql;

Vérifiez que la base hr a été créée :

SHOW DATABASES;
USE hr;
SHOW TABLES;

Les tables disponibles sont :

  • employees (employés)
  • departments (départements)
  • salaries (échelons de salaire)

Examinez leur structure et leur contenu :

DESC employees;
SELECT * FROM employees;

DESC departments;
SELECT * FROM departments;

DESC salaries;
SELECT * FROM salaries;

2.2. Créer une vue

Syntaxe :

CREATE VIEW nom_vue AS requête_SELECT;

Explication : la SELECT est exécutée immédiatement ; le jeu de résultats obtenu sert de définisseur pour la vue.

Imaginons que vous deviez fréquemment lister chaque employé avec le nom de son département. Sans vue, vous écrivez :

SELECT e.last_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;

Pour éviter de répéter cette jointuer, créez une vue :

CREATE VIEW v_employe_depart AS
SELECT e.last_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;

Vous pouvez alors interroger simplement la vue :

SELECT * FROM v_employe_depart;

3. Influence réciproque entre vue et tables de base

3.1. Modifier la vue impacte la table de base

Changez le nom d’un employé via la vue :

UPDATE v_employe_depart SET last_name = 'king' WHERE last_name = 'KING';

Vérifiez dans la table employees :

SELECT * FROM employees WHERE last_name = 'king';

La modification a bien été propagée.

3.2. Modifier la table de base impacte la vue

Renommez un département :

UPDATE departments SET department_name = 'Ressources Humaines' WHERE department_name = 'Human Resources';

Interrogez la vue :

SELECT * FROM v_employe_depart WHERE department_name = 'Ressources Humaines';

Le changement apparaît dans la vue.

4. Supprimer une vue

La commande DROP VIEW spuprime la vue sans affecter les tables de base :

DROP VIEW IF EXISTS v_employe_depart;

Après suppression, la vue n’est plus accessible via SHOW TABLES.

5. Remarques importantes sur les vues

  1. Nom unique : une vue ne peut pas porter le même nom qu’une autre vue ou qu’une table dans le même schéma.
  2. Nombre illimité : en théorie, vous pouvez créer autant de vues que vous le souhaitez, mais tenez compte des limites de performance.
  3. Index et déclencheurs : il est impossible de définir un index ou un déclencheur (trigger) sur une vue, car elle ne stocke pas physiquement les données.
  4. Sécurité : accordez des privilèges d’accès sur la vue pour limiter ce qu’un utilisateur peut voir ou modifier.
  5. Ordre dans la vue : bien qu’il soit syntaxiquement possible d’inclure ORDER BY dans la définition de la vue, cela est déconseillé : l’ordre est souvent redéfini par la requête finale. Préférez trier au moment de l’interrogation.
  6. Utilisation comme une table : une vue peut être employée dans toute opération de requête (jointures, sous‑requêtes) exactement comme une table ordinaire.

Étiquettes: MySQL SQL vues SQL base de données CREATE VIEW

Publié le 24 juin à 03h10