Code : Console
ERROR 1137 (HY000): Can't reopen table: 'TMP_Animal'
Cette fois, cela ne fonctionne pas : on extrait en effet des données de TMP_Animal, et de TMP_Animal AS TMP_Pere.
3. Sous-requête
On affiche le nom des animaux référencés comme pères.
Code : SQL
SELECT nom
FROM TMP_Animal
WHERE id IN (SELECT pere_id FROM TMP_Animal);
Code : Console
ERROR 1137 (HY000): Can't reopen table: 'TMP_Animal'
À nouveau, on extrait des données de TMP_Animal à deux endroits différents : dans la requête et dans la sous-requête. Cela ne
peut pas fonctionner.
Interaction avec les transactions
Un comportement assez intéressant lié aux tables temporaires concerne les transactions.
On a vu que les commandes de création d'objets en tout genre provoquaient la validation implicite de la transaction dans laquelle
la commande était faite. Ainsi, CREATE TABLE provoque une validation implicite.
Mais ce n'est pas le cas pour les tables temporaires : CREATE TEMPORARY TABLE et DROP TEMPORARY TABLE ne
valident pas les transactions.
Cependant ces deux commandes ne peuvent pas être annulées par un ROLLBACK.
Exemple
Code : SQL
START TRANSACTION;
INSERT INTO Espece (nom_courant, nom_latin)
VALUES ('Gerbille de Mongolie', 'Meriones unguiculatus');
CREATE TEMPORARY TABLE TMP_Test (id INT);
ROLLBACK;
SELECT id, nom_courant, nom_latin, prix FROM Espece;
SELECT * FROM TMP_Test;
id
nom_courant
nom_latin
prix
1 Chien
Canis canis
200.00
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
356/414
www.openclassrooms.com
ERROR 1137 (HY000): Can't reopen table: 'TMP_Animal'
Cette fois, cela ne fonctionne pas : on extrait en effet des données de TMP_Animal, et de TMP_Animal AS TMP_Pere.
3. Sous-requête
On affiche le nom des animaux référencés comme pères.
Code : SQL
SELECT nom
FROM TMP_Animal
WHERE id IN (SELECT pere_id FROM TMP_Animal);
Code : Console
ERROR 1137 (HY000): Can't reopen table: 'TMP_Animal'
À nouveau, on extrait des données de TMP_Animal à deux endroits différents : dans la requête et dans la sous-requête. Cela ne
peut pas fonctionner.
Interaction avec les transactions
Un comportement assez intéressant lié aux tables temporaires concerne les transactions.
On a vu que les commandes de création d'objets en tout genre provoquaient la validation implicite de la transaction dans laquelle
la commande était faite. Ainsi, CREATE TABLE provoque une validation implicite.
Mais ce n'est pas le cas pour les tables temporaires : CREATE TEMPORARY TABLE et DROP TEMPORARY TABLE ne
valident pas les transactions.
Cependant ces deux commandes ne peuvent pas être annulées par un ROLLBACK.
Exemple
Code : SQL
START TRANSACTION;
INSERT INTO Espece (nom_courant, nom_latin)
VALUES ('Gerbille de Mongolie', 'Meriones unguiculatus');
CREATE TEMPORARY TABLE TMP_Test (id INT);
ROLLBACK;
SELECT id, nom_courant, nom_latin, prix FROM Espece;
SELECT * FROM TMP_Test;
id
nom_courant
nom_latin
prix
1 Chien
Canis canis
200.00
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
356/414
www.openclassrooms.com
