Rôle des index
Tentons une nouvelle expérience.
Session 1 :
Code : SQL
START TRANSACTION;
UPDATE Animal
SET commentaires = CONCAT_WS(' ', 'Animal fondateur.', commentaires)
-- On ajoute une phrase de commentaire
WHERE date_naissance < '2007-01-01';
-- à tous les animaux nés avant 2007
Session 2 :
Code : SQL
START TRANSACTION;
UPDATE Animal
SET commentaires = 'Aveugle'
-- On modifie les
commentaires
WHERE date_naissance = '2008-03-10 13:40:00'; -- De l'animal né le
10 mars 2008 à 13h40
Dans la session 1, on fait un UPDATE sur les animaux nés avant 2007. On s'attend donc à pouvoir utiliser les animaux nés après
dans une autre session, puisque InnoDB pose des verrous sur les lignes et pas sur toute la table.
Pourtant, la session 2 semble bloquée lorsque l'on fait un UPDATE sur un animal né en 2008.
Faites un rollback sur la session 1 ; ceci débloque la session 2. Annulez également la requête de cette session.
Ce comportement est donc en contradiction avec ce qu'on obtenait précédemment. Quelle est la différence ?
Le sous-titre vous a évidemment soufflé la réponse : la différence se trouve au niveau des index. Voyons donc ça !
Voici une commande qui va vous afficher les index présents sur la table Animal :
Code : SQL
SHOW INDEX FROM Animal;
Table Non_unique
Key_name
Column_name Null
Animal 0
PRIMARY
id
Animal 0
ind_uni_nom_espece_id nom
YES
Animal 0
ind_uni_nom_espece_id espece_id
Animal 1
fk_race_id
race_id
YES
Animal 1
fk_espece_id
espece_id
Animal 1
fk_mere_id
mere_id
YES
Animal 1
fk_pere_id
pere_id
YES
Partie 5 : Sécuriser et automatiser ses actions
247/414
www.openclassrooms.com
Précédent

- 247/413

Suivant