SET NEW.utilisateur_insertion = CURRENT_USER();
SET NEW.date_modification = NOW();
SET NEW.utilisateur_modification = CURRENT_USER();
END |
CREATE TRIGGER before_update_race BEFORE UPDATE
ON Race FOR EACH ROW
BEGIN
SET NEW.date_modification = NOW();
SET NEW.utilisateur_modification = CURRENT_USER();
END |
CREATE TRIGGER before_delete_race BEFORE DELETE
ON Race FOR EACH ROW
BEGIN
UPDATE Animal
SET race_id = NULL
WHERE race_id = OLD.id;
END |
DELIMITER ;
Création d'une vue
Le principe
Pour notre élevage, la requête suivante est très utile.
Code : SQL
SELECT Animal.id, Animal.sexe, Animal.date_naissance, Animal.nom,
Animal.commentaires,
Animal.espece_id, Animal.race_id, Animal.mere_id,
Animal.pere_id, Animal.disponible,
Espece.nom_courant AS espece_nom, Race.nom AS race_nom
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
LEFT JOIN Race ON Animal.race_id = Race.id;
Avec ou sans clause WHERE, il arrive régulièrement qu'on veuille trouver des renseignements sur nos animaux, y compris leur
race et leur espèce (et, seul, l'id contenu dans Animal n'est pas une information très explicite). Il serait donc bien pratique de
pouvoir stocker cette requête plutôt que de devoir la retaper en entier à chaque fois.
C'est très exactement le principe d'une vue : on stocke une requête SELECT en lui donnant un nom, et on peut ensuite appeler
directement la vue par son nom.
Quelques remarques importantes :
Il s'agit bien d'objets de la base de données, stockés de manière durable, comme le sont les tables ou les procédures
stockées.
C'est donc bien différent des requêtes préparées, qui ne sont définies que le temps d'une session, et qui ont un tout autre
but.
Ce qui est stocké est la requête, et non pas les résultats de celle-ci. On ne gagne absolument rien en terme de
performance en utilisant une vue plutôt qu'en faisant une requête directement sur les tables.
Création
Pour créer une vue, on utilise tout simplement la commande CREATE VIEW, dont voici la syntaxe :
Code : SQL
CREATE [OR REPLACE] VIEW nom_vue
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
332/414
www.openclassrooms.com
SET NEW.date_modification = NOW();
SET NEW.utilisateur_modification = CURRENT_USER();
END |
CREATE TRIGGER before_update_race BEFORE UPDATE
ON Race FOR EACH ROW
BEGIN
SET NEW.date_modification = NOW();
SET NEW.utilisateur_modification = CURRENT_USER();
END |
CREATE TRIGGER before_delete_race BEFORE DELETE
ON Race FOR EACH ROW
BEGIN
UPDATE Animal
SET race_id = NULL
WHERE race_id = OLD.id;
END |
DELIMITER ;
Création d'une vue
Le principe
Pour notre élevage, la requête suivante est très utile.
Code : SQL
SELECT Animal.id, Animal.sexe, Animal.date_naissance, Animal.nom,
Animal.commentaires,
Animal.espece_id, Animal.race_id, Animal.mere_id,
Animal.pere_id, Animal.disponible,
Espece.nom_courant AS espece_nom, Race.nom AS race_nom
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
LEFT JOIN Race ON Animal.race_id = Race.id;
Avec ou sans clause WHERE, il arrive régulièrement qu'on veuille trouver des renseignements sur nos animaux, y compris leur
race et leur espèce (et, seul, l'id contenu dans Animal n'est pas une information très explicite). Il serait donc bien pratique de
pouvoir stocker cette requête plutôt que de devoir la retaper en entier à chaque fois.
C'est très exactement le principe d'une vue : on stocke une requête SELECT en lui donnant un nom, et on peut ensuite appeler
directement la vue par son nom.
Quelques remarques importantes :
Il s'agit bien d'objets de la base de données, stockés de manière durable, comme le sont les tables ou les procédures
stockées.
C'est donc bien différent des requêtes préparées, qui ne sont définies que le temps d'une session, et qui ont un tout autre
but.
Ce qui est stocké est la requête, et non pas les résultats de celle-ci. On ne gagne absolument rien en terme de
performance en utilisant une vue plutôt qu'en faisant une requête directement sur les tables.
Création
Pour créer une vue, on utilise tout simplement la commande CREATE VIEW, dont voici la syntaxe :
Code : SQL
CREATE [OR REPLACE] VIEW nom_vue
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
332/414
www.openclassrooms.com
