MySQL: les Transactions vs Verrouillage des Tables

Je suis un peu confus avec des transactions vs verrouillage de tables afin de garantir l'intégrité de base de données et assurez-vous de SÉLECTIONNER et de mettre à JOUR restent synchronisés et aucune autre connexion interfère avec elle. J'ai besoin de:

SELECT * FROM table WHERE (...) LIMIT 1

if (condition passes) {
   // Update row I got from the select 
   UPDATE table SET column = "value" WHERE (...)

   ... other logic (including INSERT some data) ...
}

J'ai besoin pour s'assurer qu'aucun autre des requêtes d'interférer et d'effectuer la même SELECT (la lecture de "la vieille valeur" avant que la connexion des finitions de la mise à jour de la ligne.

Je sais que je peux défaut de LOCK TABLES table juste assurez-vous que seulement 1 connexion est en train de faire ça à un moment, et le déverrouiller quand je suis fait, mais qui semble exagéré. Serait d'emballage que, dans une transaction de faire la même chose (s'assurant de l'absence d'autres tentatives de connexion le même processus, alors que l'autre est toujours en cours de traitement)? Ou un SELECT ... FOR UPDATE ou SELECT ... LOCK IN SHARE MODE être mieux?

InformationsquelleAutor Ryan | 2010-11-19