Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sperrtabelle nach BeginTransaction MySql-Transaktion in c#.net

BeginTransaction bedeutet nicht, dass "Ihre Transaktion gestartet wurde und alles gesperrt ist". Es informiert das RDBMS nur über Ihre Absicht, eine Transaktion einzuleiten, und dass alles, was Sie von nun an tun sollten, als atomar betrachtet werden sollte und muss.

Das bedeutet, dass Sie BeingTransaction anrufen könnten und ich alle Daten aus allen Tabellen in Ihrer Datenbank löschen könnte und das RDBMS mich das gerne tun lässt. Hoffentlich sollte ich die DB nicht fallen lassen, weil Sie eine offene Verbindung dazu haben, aber heutzutage weiß man nie. Möglicherweise gibt es einige undokumentierte Funktionen, die mir nicht bekannt sind.

Atomar bedeutet, dass jede Aktion oder jede Gruppe von Aktionen als eine ausgeführt werden muss. Wenn einer von ihnen versagt, versagen alle. Es ist ein Alles-oder-Nichts-Konzept.

Sieht so aus, als würden Sie drei Zeilen in eine Tabelle einfügen. Wenn Ihre Tabelle leer ist oder eine sehr geringe Anzahl von Zeilen hat, wird möglicherweise die gesamte Tabelle gesperrt, abhängig von den LOCK-ESCALATION-Regeln Ihres RDBMS. Wenn es sich jedoch um eine große oder sehr große oder partitionierte Tabelle handelt, garantieren die LOCK-Eskalationsregeln möglicherweise keine Tabellensperre. Es ist also möglich, dass mehrere Transaktionen gleichzeitig Zeilen in Ihre Tabelle einfügen. Es hängt alles davon ab, wie das RDBMS mit dieser Situation umgeht und wie Ihr Datenmodell strukturiert ist.

Nun zur Beantwortung Ihrer Frage:

HINWEIS - Suchen Sie nach einer Möglichkeit, die gesamte Tabelle zu sperren, bevor Sie mit dem Einfügen von Daten beginnen.

Dies ist jedoch normalerweise nicht gut, aber ich gehe davon aus, dass Sie einen vernünftigen Grund dafür haben.

Hoffe das hilft.