sql >> Database >  >> RDS >> Mysql

vergrendel tabel na BeginTransaction MySql-transactie in c#.net

BeginTransaction betekent niet dat "uw transactie is gestart en alles is vergrendeld". Het informeert het RDBMS alleen over uw intentie om een ​​transactie te starten en dat alles wat u vanaf nu zou moeten doen, als atomair moet en moet worden beschouwd.

Dit betekent dat je BeingTransaction zou kunnen bellen en ik alle gegevens van alle tabellen in je database zou kunnen verwijderen en het RDBMS laat me dat graag doen. Hopelijk laat het me de DB niet laten vallen omdat je er een open verbinding mee hebt, maar je weet tegenwoordig nooit. Er zijn mogelijk ongedocumenteerde functies waarvan ik niet op de hoogte ben.

Atomic betekent dat elke actie of reeks acties als één moet worden uitgevoerd. Als een van hen faalt, falen ze allemaal. Het is een alles of niets concept.

Het lijkt erop dat u drie rijen in een tabel invoegt. Als uw tabel leeg is of een zeer laag aantal rijen heeft, kan deze de hele tabel vergrendelen, afhankelijk van de LOCK ESCALATION-regels van uw RDBMS. Als het echter een grote of zeer grote of gepartitioneerde tafel is, kunnen de LOCK-escalatieregels mogelijk geen tafelvergrendeling garanderen. Het kan dus nog steeds mogelijk zijn dat meerdere transacties tegelijkertijd rijen in uw tabel invoegen. Het hangt allemaal af van hoe het RDBMS met deze situatie omgaat en hoe uw datamodel is gestructureerd.

Om nu je vraag te beantwoorden:

TIP - Zoek naar een manier om de hele tabel te vergrendelen voordat u gegevens gaat invoegen.

Dit is echter meestal niet goed, maar ik ga ervan uit dat je een redelijke reden hebt om het te doen.

Ik hoop dat dit helpt.




  1. Oracle SELECT QUERY voor een-op-veel relatie tussen twee tabellen

  2. Implementeer het Django-project op google Cloud App Engine met externe bibliotheken

  3. .NET, C#, LINQ, SQL en OR-mapping - ik snap het gewoon niet :(

  4. mysqli_stmt::num_rows() geeft de verkeerde waarde terug