Mysql
 sql >> Base de données >  >> RDS >> Mysql

verrouiller la table après BeginTransaction MySql Transaction dans c#.net

BeginTransaction ne signifie pas que "votre transaction a commencé et que tout est verrouillé". Il informe simplement le SGBDR de votre intention d'initier une transaction et que tout ce que vous devez faire à partir de maintenant doit et doit être considéré comme atomique.

Cela signifie que vous pouvez appeler BeingTransaction et que je peux supprimer toutes les données de toutes les tables de votre base de données et que le RDBMS me laissera le faire avec plaisir. J'espère que cela ne devrait pas me laisser tomber la base de données parce que vous avez une connexion ouverte avec elle, cependant, on ne sait jamais de nos jours. Il peut y avoir des fonctionnalités non documentées dont je ne suis pas au courant.

Atomique signifie que toute action ou ensemble d'actions doit être effectué comme une seule. Si l'un d'entre eux échoue, tous échouent. C'est un concept tout ou rien.

On dirait que vous insérez trois lignes dans un tableau. Si votre table est vide ou a un très petit nombre de lignes, elle peut verrouiller toute la table en fonction des règles LOCK ESCALATION de votre RDBMS. Cependant, s'il s'agit d'une table grande ou très grande ou partitionnée, les règles d'escalade LOCK peuvent ne pas garantir un verrou de table. Ainsi, il est toujours possible que plusieurs transactions insèrent des lignes dans votre table en même temps. Tout dépend de la manière dont le SGBDR gère cette situation et de la structure de votre modèle de données.

Maintenant, pour répondre à votre question :

ASTUCE - Cherchez un moyen de verrouiller l'intégralité du tableau avant de commencer à insérer des données.

Cependant, ce n'est généralement pas bon, mais je suppose que vous avez une raison raisonnable de le faire.

J'espère que cela vous aidera.