2 Roucky 2010-03-24 02:23:00 NULL
150.00
8 Bagherra 2008-09-11 15:38:00 Maine coon 735.00
29 Fiero
2009-05-14 06:30:00 Singapura
985.00
31 Filou
2008-02-20 15:45:00 Bleu russe 835.00
34 Capou
2008-04-20 03:22:00 Maine coon 735.00
35 Raccou
2006-05-19 16:56:00 Bleu russe 835.00
36 Boucan 2009-05-14 06:42:00 Singapura
985.00
37 Callune 2006-05-19 16:06:00 Nebelung
985.00
38 Boule
2009-05-14 06:45:00 Singapura
985.00
43 Cracotte 2007-03-12 11:54:00 Maine coon 735.00
44 Cawette 2006-05-19 16:16:00 Nebelung
985.00
61 Yoda
2010-11-09 00:00:00 Maine coon 735.00
Je rappelle que la fonction COALESCE() prend un nombre illimité de paramètres, et renvoie le premier paramètre non
NULL qu'elle rencontre. Donc ici, s'il s'agit d'un chat de race, Race.prix ne sera pas NULL et sera donc renvoyé. Par
contre, s'il n'y a pas de race, Race.prix sera NULL, mais pas Espece.prix, qui sera alors sélectionné.
Si, pendant que le premier client fait son choix, un second client arrive, qui veut adopter un chat Maine Coon, il va également
chercher la liste des chats disponibles. Et vu qu'on travaille pour l'instant en verrous partagés, il va pouvoir l'obtenir.
Session 2 :
Code : SQL
START TRANSACTION;
SELECT Animal.id, Animal.nom, Animal.date_naissance, Race.nom as
race, COALESCE(Race.prix, Espece.prix) as prix
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
INNER JOIN Race ON Animal.race_id = Race.id
-- Jointure
interne cette fois
WHERE Race.nom = 'Maine Coon'
-- Uniquement
les Maine Coon...
AND Animal.id NOT IN (SELECT animal_id FROM Adoption) -- ... qui
n'ont pas encore été adoptés
LOCK IN SHARE MODE;
id
nom
date_naissance
race
prix
8 Bagherra 2008-09-11 15:38:00 Maine coon 735.00
34 Capou
2008-04-20 03:22:00 Maine coon 735.00
43 Cracotte 2007-03-12 11:54:00 Maine coon 735.00
61 Yoda
2010-11-09 00:00:00 Maine coon 735.00
C'est alors que le premier client, M. Dupont, décide de craquer pour Bagherra.
Code : SQL
INSERT INTO Adoption (client_id, animal_id, date_reservation, prix,
Partie 5 : Sécuriser et automatiser ses actions
251/414
www.openclassrooms.com
150.00
8 Bagherra 2008-09-11 15:38:00 Maine coon 735.00
29 Fiero
2009-05-14 06:30:00 Singapura
985.00
31 Filou
2008-02-20 15:45:00 Bleu russe 835.00
34 Capou
2008-04-20 03:22:00 Maine coon 735.00
35 Raccou
2006-05-19 16:56:00 Bleu russe 835.00
36 Boucan 2009-05-14 06:42:00 Singapura
985.00
37 Callune 2006-05-19 16:06:00 Nebelung
985.00
38 Boule
2009-05-14 06:45:00 Singapura
985.00
43 Cracotte 2007-03-12 11:54:00 Maine coon 735.00
44 Cawette 2006-05-19 16:16:00 Nebelung
985.00
61 Yoda
2010-11-09 00:00:00 Maine coon 735.00
Je rappelle que la fonction COALESCE() prend un nombre illimité de paramètres, et renvoie le premier paramètre non
NULL qu'elle rencontre. Donc ici, s'il s'agit d'un chat de race, Race.prix ne sera pas NULL et sera donc renvoyé. Par
contre, s'il n'y a pas de race, Race.prix sera NULL, mais pas Espece.prix, qui sera alors sélectionné.
Si, pendant que le premier client fait son choix, un second client arrive, qui veut adopter un chat Maine Coon, il va également
chercher la liste des chats disponibles. Et vu qu'on travaille pour l'instant en verrous partagés, il va pouvoir l'obtenir.
Session 2 :
Code : SQL
START TRANSACTION;
SELECT Animal.id, Animal.nom, Animal.date_naissance, Race.nom as
race, COALESCE(Race.prix, Espece.prix) as prix
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
INNER JOIN Race ON Animal.race_id = Race.id
-- Jointure
interne cette fois
WHERE Race.nom = 'Maine Coon'
-- Uniquement
les Maine Coon...
AND Animal.id NOT IN (SELECT animal_id FROM Adoption) -- ... qui
n'ont pas encore été adoptés
LOCK IN SHARE MODE;
id
nom
date_naissance
race
prix
8 Bagherra 2008-09-11 15:38:00 Maine coon 735.00
34 Capou
2008-04-20 03:22:00 Maine coon 735.00
43 Cracotte 2007-03-12 11:54:00 Maine coon 735.00
61 Yoda
2010-11-09 00:00:00 Maine coon 735.00
C'est alors que le premier client, M. Dupont, décide de craquer pour Bagherra.
Code : SQL
INSERT INTO Adoption (client_id, animal_id, date_reservation, prix,
Partie 5 : Sécuriser et automatiser ses actions
251/414
www.openclassrooms.com
