date_adoption, prix, paye) VALUES (15, 30, '2008-08-17', '2008-0817', 735.00, 1);
INSERT INTO Adoption (client_id, animal_id, date_reservation,
date_adoption, prix, paye) VALUES (11, 32, '2008-08-17', '2010-0309', 140.00, 1);
INSERT INTO Adoption (client_id, animal_id, date_reservation,
date_adoption, prix, paye) VALUES (9, 33, '2007-02-11', '2007-0211', 835.00, 1);
INSERT INTO Adoption (client_id, animal_id, date_reservation,
date_adoption, prix, paye) VALUES (2, 3, '2011-03-12', '2011-0312', 835.00, 1);
La table Adoption ne contient pas de colonne id auto-incrémentée. Par contre, on a bien défini une clé primaire, mais une clé
primaire composite (sur plusieurs colonnes). En effet, une adoption est définie par un client adoptant un animal. Il n'est pas
nécessaire d'ajouter une colonne supplémentaire pour définir individuellement chaque ligne ; le couple (client_id, animal_id )
fait très bien l'affaire (il est composé de deux SMALLINT, donc les recherches sur cette clé seront rapides).
Notez que nous définissons également un index UNIQUE sur la colonne animal_id . Par conséquent, on aurait même pu définir
directement animal_id comme étant la clé primaire. Je trouvais cependant plus logique d'inclure le client dans la définition d'une
adoption. C'est un choix plutôt arbitraire, qui a surtout comme avantage de vous montrer un exemple de clé composite.
Syntaxe et utilisation : verrous de table
Les verrous de table sont les seuls supportés par MyISAM. Ils sont d'ailleurs principalement utilisés pour pallier en partie
l'absence de transactions dans MyISAM.
Les tables InnoDB peuvent également utiliser ce type de verrou.
Pour verrouiller une table, il faut utiliser la commande LOCK TABLES :
Code : SQL
LOCK TABLES nom_table [AS alias_table] [READ | WRITE] [, ...];
En utilisant READ, un verrou de lecture sera posé ; c'est-à-dire que les autres sessions pourront toujours lire les données
des tables verrouillées, mais ne pourront plus les modifier.
En utilisant WRITE, un verrou d'écriture sera posé. Les autres sessions ne pourront plus ni lire ni modifier les données
des tables verrouillées.
Pour déverrouiller les tables, on utilise UNLOCK TABLES. Cela déverrouille toutes les tables verrouillées. Il n'est pas possible
de préciser les tables à déverrouiller. Tous les verrous de table d'une session sont relâchés en même temps.
Session ayant obtenu le verrou
Lorsqu'une session acquiert un ou plusieurs verrous de table, cela a plusieurs conséquences pour cette session :
elle ne peut plus accéder qu'aux tables sur lesquelles elle a posé un verrou ;
elle ne peut accéder à ces tables qu'en utilisant les noms qu'elle a donnés lors du verrouillage (soit le nom de la table,
soit le/les alias donné(s)) ;
s'il s'agit d'un verrou de lecture (READ), elle peut uniquement lire les données, pas les modifier.
Exemples : on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au nom de la table, l'autre sans.
Code : SQL
LOCK TABLES Espece READ,
-- On pose un verrou de
lecture sur Espece
Adoption AS adopt WRITE; -- et un verrou d'écriture sur
Adoption avec l'alias adopt
Partie 5 : Sécuriser et automatiser ses actions
236/414
www.openclassrooms.com
INSERT INTO Adoption (client_id, animal_id, date_reservation,
date_adoption, prix, paye) VALUES (11, 32, '2008-08-17', '2010-0309', 140.00, 1);
INSERT INTO Adoption (client_id, animal_id, date_reservation,
date_adoption, prix, paye) VALUES (9, 33, '2007-02-11', '2007-0211', 835.00, 1);
INSERT INTO Adoption (client_id, animal_id, date_reservation,
date_adoption, prix, paye) VALUES (2, 3, '2011-03-12', '2011-0312', 835.00, 1);
La table Adoption ne contient pas de colonne id auto-incrémentée. Par contre, on a bien défini une clé primaire, mais une clé
primaire composite (sur plusieurs colonnes). En effet, une adoption est définie par un client adoptant un animal. Il n'est pas
nécessaire d'ajouter une colonne supplémentaire pour définir individuellement chaque ligne ; le couple (client_id, animal_id )
fait très bien l'affaire (il est composé de deux SMALLINT, donc les recherches sur cette clé seront rapides).
Notez que nous définissons également un index UNIQUE sur la colonne animal_id . Par conséquent, on aurait même pu définir
directement animal_id comme étant la clé primaire. Je trouvais cependant plus logique d'inclure le client dans la définition d'une
adoption. C'est un choix plutôt arbitraire, qui a surtout comme avantage de vous montrer un exemple de clé composite.
Syntaxe et utilisation : verrous de table
Les verrous de table sont les seuls supportés par MyISAM. Ils sont d'ailleurs principalement utilisés pour pallier en partie
l'absence de transactions dans MyISAM.
Les tables InnoDB peuvent également utiliser ce type de verrou.
Pour verrouiller une table, il faut utiliser la commande LOCK TABLES :
Code : SQL
LOCK TABLES nom_table [AS alias_table] [READ | WRITE] [, ...];
En utilisant READ, un verrou de lecture sera posé ; c'est-à-dire que les autres sessions pourront toujours lire les données
des tables verrouillées, mais ne pourront plus les modifier.
En utilisant WRITE, un verrou d'écriture sera posé. Les autres sessions ne pourront plus ni lire ni modifier les données
des tables verrouillées.
Pour déverrouiller les tables, on utilise UNLOCK TABLES. Cela déverrouille toutes les tables verrouillées. Il n'est pas possible
de préciser les tables à déverrouiller. Tous les verrous de table d'une session sont relâchés en même temps.
Session ayant obtenu le verrou
Lorsqu'une session acquiert un ou plusieurs verrous de table, cela a plusieurs conséquences pour cette session :
elle ne peut plus accéder qu'aux tables sur lesquelles elle a posé un verrou ;
elle ne peut accéder à ces tables qu'en utilisant les noms qu'elle a donnés lors du verrouillage (soit le nom de la table,
soit le/les alias donné(s)) ;
s'il s'agit d'un verrou de lecture (READ), elle peut uniquement lire les données, pas les modifier.
Exemples : on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au nom de la table, l'autre sans.
Code : SQL
LOCK TABLES Espece READ,
-- On pose un verrou de
lecture sur Espece
Adoption AS adopt WRITE; -- et un verrou d'écriture sur
Adoption avec l'alias adopt
Partie 5 : Sécuriser et automatiser ses actions
236/414
www.openclassrooms.com
