🛢️Parcours Fioul GroupéMySQL · Chapitre 08
Accueil › MySQL › Chapitre 08
Chapitre 08 / 16

Les vues

Une vue est une requête enregistrée qui se manipule comme une table virtuelle. Elle simplifie les requêtes complexes, masque des colonnes sensibles et stabilise une interface de données.

1 Notion

CREATE VIEW

CREATE VIEW v_campagne_volume AS
SELECT ca.id, ca.libelle, ca.commune, ca.prix_litre,
       COALESCE(SUM(c.litres), 0) AS volume_total,
       COUNT(c.id) AS nb_participants
FROM campagne ca
LEFT JOIN commande c ON c.campagne_id = ca.id
GROUP BY ca.id, ca.libelle, ca.commune, ca.prix_litre;

-- on l'interroge comme une table
SELECT * FROM v_campagne_volume WHERE volume_total >= 5000;
Une vue ne stocke pas de données — elle mémorise la requête : à chaque appel MySQL réexécute le SELECT, donc les données sont toujours à jour. (Pas de vue « matérialisée » native, contrairement à PostgreSQL.)
2 Notion

Modifier, supprimer

CREATE OR REPLACE VIEW v_campagne_ouverte AS
SELECT id, libelle, prix_litre FROM campagne WHERE statut = 'OUVERTE';

ALTER VIEW v_campagne_ouverte AS
SELECT id, libelle, prix_litre, commune FROM campagne WHERE statut = 'OUVERTE';

DROP VIEW IF EXISTS v_campagne_ouverte;
3 Notion

Vues modifiables & CHECK OPTION

Une vue simple (une table, sans agrégat) est modifiable : écrire dessus agit sur la table source. WITH CHECK OPTION empêche d'écrire une ligne qui sortirait du périmètre de la vue.

CREATE VIEW v_campagne_ouverte AS
SELECT id, libelle, statut FROM campagne
WHERE statut = 'OUVERTE'
WITH CHECK OPTION;

-- refusé : la ligne ne satisferait plus la condition
UPDATE v_campagne_ouverte SET statut = 'CLOTUREE' WHERE id = 1;
🛢️ Sur le projet Fioul Groupé

v_campagne_volume est parfaite pour l'appli : elle expose directement le volume cumulé et le nombre de participants, sans réécrire l'agrégation à chaque écran. On peut aussi créer une v_campagne_publique sans les données internes, à donner à la couche mobile.

À retenir
← Chapitre 07