Mysql
 sql >> Database >  >> RDS >> Mysql

lock table dopo BeginTransaction MySql Transaction in c#.net

BeginTransaction non significa che "la tua transazione è iniziata e tutto è bloccato". Informa semplicemente l'RDBMS in merito alla tua intenzione di avviare una transazione e che tutto ciò che dovresti fare d'ora in poi dovrebbe e deve essere considerato atomico.

Ciò significa che potresti chiamare BeingTransaction e potrei eliminare tutti i dati da tutte le tabelle nel tuo database e l'RDBMS me lo permetterà felicemente. Si spera che non dovrebbe lasciarmi eliminare il DB perché hai una connessione aperta ad esso, tuttavia, di questi tempi non si sa mai. Potrebbero esserci alcune funzionalità non documentate di cui non sono a conoscenza.

Atomico significa che qualsiasi azione o insieme di azioni deve essere eseguita come una. Se uno di loro fallisce, falliscono tutti. È un concetto tutto o niente.

Sembra che tu stia inserendo tre righe in una tabella. Se la tua tabella è vuota o ha un numero molto basso di righe, potrebbe bloccare l'intera tabella a seconda delle regole LOCK ECALATION del tuo RDBMS. Tuttavia, se si tratta di una tabella grande o molto grande o partizionata, le regole di escalation LOCK potrebbero non garantire un blocco della tabella. Pertanto, potrebbe essere ancora possibile che più transazioni inseriscano righe nella tabella contemporaneamente. Tutto dipende da come l'RDBMS gestisce questa situazione e da come è strutturato il tuo modello di dati.

Ora per rispondere alla tua domanda:

SUGGERIMENTO - Cerca un modo per bloccare l'intera tabella prima di iniziare a inserire i dati.

Tuttavia, questo di solito non va bene, ma presumo che tu abbia una ragione ragionevole per farlo.

Spero che questo aiuti.