IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

[InnoDB] Niveau d'isolation et LOCK FOR UPDATE / IN SHARE MODE


Sujet :

Administration MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 12
    Points : 9
    Points
    9
    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!

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    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:

    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

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/09/2010, 20h01
  2. select for update LOCK 3 10gR2
    Par petitfrere dans le forum Oracle
    Réponses: 1
    Dernier message: 01/12/2006, 19h52
  3. innodb - niveau d'isolation
    Par flow38 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/09/2006, 16h55
  4. [Lock "FOR UPDATE OF"] Fonctionnement
    Par Yoh dans le forum Oracle
    Réponses: 1
    Dernier message: 03/05/2006, 11h36
  5. [ASE] Les locks avec un cursor for update
    Par PiyuXYZ dans le forum Sybase
    Réponses: 1
    Dernier message: 11/02/2006, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo