sql >> Databasteknik >  >> RDS >> Mysql

lås tabell efter BeginTransaction MySql Transaction i c#.net

BeginTransaction betyder inte att "din transaktion har startat och allt är låst". Den informerar bara RDBMS om din avsikt att initiera en transaktion och att allt du bör göra från och med nu bör och måste betraktas som atomärt.

Det betyder att du kan ringa BeingTransaction och jag kan ta bort all data från alla tabeller i din databas och RDBMS låter mig gärna göra det. Förhoppningsvis bör det inte låta mig släppa DB eftersom du har en öppen anslutning till det, men man vet aldrig nuförtiden. Det kan finnas några odokumenterade funktioner som jag inte känner till.

Atomisk betyder att varje åtgärd eller uppsättning åtgärder måste utföras som en. Om någon av dem misslyckas så misslyckas de alla. Det är ett allt eller inget-koncept.

Det verkar som att du infogar tre rader i en tabell. Om din tabell är tom eller har ett mycket lågt antal rader, kan det låsa hela tabellen beroende på LOCK ESCALATION-reglerna för din RDBMS. Men om det är en stor eller mycket stor eller partitionerad tabell kan LOCK-eskaleringsreglerna kanske inte garantera ett bordslås. Så det kan fortfarande vara möjligt för flera transaktioner att infoga rader i din tabell samtidigt. Allt beror på hur RDBMS hanterar denna situation och hur din datamodell är uppbyggd.

Nu för att svara på din fråga:

TIPS - Leta efter ett sätt att låsa hela tabellen innan du börjar infoga data.

Detta brukar dock inte vara bra men jag antar att du har en rimlig anledning att göra det.

Hoppas detta hjälper.




  1. Byter namn på pluggbar databas

  2. VÄLJ * DÄR INTE FINNS

  3. OLE DB-leverantör Microsoft.ACE.OLEDB.12.0 för länkad server (null) returnerade meddelande Bokmärket är ogiltigt.

  4. Postgres heltalsmatriser som parametrar?