Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/08/2006, 18h11   #1
Invité de passage
 
Inscription : août 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 12
Points : 3
Points : 3
Par défaut [InnoDB] Niveau d'isolation et LOCK FOR UPDATE / IN SHARE MODE

Salut, alors voila j'ai lu ce sympathique tutorial en anglais(http://dev.mysql.com/books/mysqlpres...rial/ch10.html) et j'ai une question:

Si j'ai bien compris, pour faire mes transactions et gerer les accés concurrents à la base, j'utilise la syntaxe "start transaction mes requetes comit" en spécifiant un niveau d'isolation de la transaction grace à "set transaction isolation level ...."

Mais alors à quoi servent alors les syntaxe suivantes?
SELECT ... FOR UPDATE /SELECT ... LOCK IN SHARE MODE

Il s'agit d'une technique redondante par rapport a la precedente?ces requete ont leur propre niveau d'isolation par defaut??? Je trouve la doc officielle sur le sujet particulierement mal foutue!!

Enfin voila merci de m'eclairer!
flow38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2006, 10h19   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Salut,

C'est vrai que le chapitre sur les locking reads est assez imbitable. En fait ils servent à pallier, le temps d'une requête ou d'une transaction, les problèmes engendrés par un niveau d'isolation bas.

Cf http://www.montefiore.ulg.ac.be/serv...nsactions.html
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2006, 17h38   #3
Invité de passage
 
Inscription : août 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 12
Points : 3
Points : 3
Merci bien maximilien pour ce lien!! J'aurai juste encore quelques petites questions, un peu candides ( pour pas dire stupide lol) mais je prefere etre bien sûr:

Quand dans le lien il est ecrit:

Citation:
Ainsi, une commande de lecture SELECT ... LOCK IN SHARE MODE a pour effet de placer un verrou en lecture sur toutes les données lues,
_Les "données lues" ce sont bien les lignes qui sont traitées afin d'obtenir le resultat de la requete, ou alors le resultat de la requete elle meme??

_Les verrous en ecriture empeche la modification et l'insertion de donnée c'est ça?


Par exemple si je fait sur une table de membre (id, pseudo, password, email) une requete :

SET AUTO_COMMIT=0;
START TRANSACTION;
select email from 'tbl_membre' where email = 'un_email@truc.fr' FOR UPDATE puis autre requete..
COMMIT;

Est ce que cela me garantie (grace au verrou en ecriture) qu'entre la requete select et le commit, la table tbl_membre n'aura pas subi d'insertion(insert)?

voilou, bon ba je commence à y voir plus claire
merci encore maximilien
flow38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2006, 01h50   #4
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Citation:
Envoyé par flow38
_Les "données lues" ce sont bien les lignes qui sont traitées afin d'obtenir le resultat de la requete, ou alors le resultat de la requete elle meme??
Bonne question... Pour un SELECT LOCK IN SHARE MODE probablement toutes les lignes utilisées pour construire le resultset, par contre pour un FOR UPDATE pas forcément puisque le but est ensuite de mettre à jour les lignes retournées par le SELECT.

Citation:
Envoyé par flow38
_Les verrous en ecriture empeche la modification et l'insertion de donnée c'est ça?
ET la lecture... contrairement au verrou en lecture seule.

Citation:
Envoyé par flow38
Par exemple si je fait sur une table de membre (id, pseudo, password, email) une requete :

SET AUTO_COMMIT=0;
START TRANSACTION;
select email from 'tbl_membre' where email = 'un_email@truc.fr' FOR UPDATE puis autre requete..
COMMIT;

Est ce que cela me garantie (grace au verrou en ecriture) qu'entre la requete select et le commit, la table tbl_membre n'aura pas subi d'insertion(insert)?
Non, ça garantit que la ligne sélectionnée ne sera ni lisible ni modifiable jusqu'à la fin de ta transaction, autrement dit entre le SELECT FOR UPDATE et le COMMIT tu peux faire un UPDATE sur cette ligne en toute tranquilité...

Qu'est-ce que tu cherches à faire exactement ?
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h02.


 
 
 
 
Partenaires

Hébergement Web