2010-11-23 9 views
0

J'ai lu sur les transactions dans MySQL, mais je ne pouvais pas comprendre un problème. Les transactions sont un moyen de s'assurer que dans un bloc d'instructions, toutes sont exécutées ou aucune d'entre elles. Cependant, une transaction assure-t-elle le "verrouillage" des lignes qui en font partie? C'est, dire que j'ai les énoncés suivants (pseudo):Question sur les transactions MySQL

1) START TRANSACTION 
2) SELECT row1 FROM table 
3) UPDATE table SET row1='new value' 
4) COMMIT 

Maintenant, dire un utilisateur a tenté d'accéder row1 au moment où le système était à la ligne 3 ci-dessus .. Est-ce que l'utilisateur a accès à la ligne (et alors il peut voir l'ancienne valeur de row1), ou devra-t-il attendre que la transaction soit finie, et alors seulement la ligne sera récupérée avec la nouvelle valeur.

Merci! Joel

Répondre

2

Non, les transactions et l'isolation sont deux concepts distincts.

Cinq niveaux d'isolement:

  1. Aucun
  2. Lire commis signifie que les lectures sont empêchés sales; des lectures non reproductibles et des lectures fantômes peuvent se produire.
  3. Lecture non validée signifie que des lectures incorrectes, des lectures non répétables et des lectures fantômes peuvent se produire.
  4. Lecture répétable signifie que les lectures incorrectes et les lectures non répétables sont évitées; des lectures fantômes peuvent se produire.
  5. Sérialisable signifie que les lectures incorrectes, les lectures non répétables et les lectures fantômes sont évitées.
0

Lorsque vous démarrez une transaction, les modifications que vous avez apportées deviennent visibles uniquement après que la transaction a été validée. C'est plus une isolation qu'une serrure.

HTH

2

Cela dépend. Voir le MySQL SELECT statement syntax, en particulier FOR UPDATE et LOCK IN SHARE MODE. "Si vous utilisez FOR UPDATE avec un moteur de stockage utilisant des verrous de page ou de ligne, les lignes examinées par la requête sont verrouillées en écriture jusqu'à la fin de la transaction en cours.LOCK IN SHARE MODE définit un verrou partagé qui autorise transactions pour lire les lignes examinées mais pas pour les mettre à jour ou les supprimer. "

Questions connexes