Eigenschaften von Transaktionen:
1) Atomizität: Eine Transaktion ist eine logische Arbeitseinheit der Datenbank und muss eine atomare Arbeitseinheit sein. Für ihre Datenänderungen werden entweder alle ausgeführt oder keiner von ihnen wird ausgeführt.
2) Konsistenz: Wenn eine Transaktion abgeschlossen ist, müssen alle Daten konsistent sein. In der entsprechenden Datenbank müssen alle Regeln auf Transaktionsänderungen angewendet werden, um die Integrität aller Daten zu wahren.
3) Isolation: Die Ausführung einer Transaktion kann nicht durch andere Transaktionen beeinflusst werden.
4) Haltbarkeit: Sobald eine Transaktion übermittelt wird, wird der Vorgang der Transaktion dauerhaft in der Datenbank gespeichert. Selbst wenn Sie zu diesem Zeitpunkt einen Rollback-Vorgang durchführen, werden die Änderungen nicht rückgängig gemacht.
Transaktion: Es handelt sich um eine Einheit zur Parallelitätskontrolle und eine benutzerdefinierte Abfolge von Vorgängen. Entweder werden alle oder keine dieser Vorgänge ausgeführt, und sie sind eine integrale Arbeitseinheit. Durch Transaktionen kann SQL Server eine Reihe logisch zusammenhängender Vorgänge miteinander verbinden, sodass der Server die Datenintegrität aufrechterhält. Eine Transaktion beginnt normalerweise mit „Begin Transaction“ und endet mit „Commit“ oder „Rollback“. Commint bedeutet Übermittlung, also alle Vorgänge zum Festschreiben einer Transaktion. Insbesondere werden alle Aktualisierungen der Daten in der Transaktion in die physische Datenbank auf der Festplatte zurückgeschrieben und die Transaktion endet normal. Rollback bedeutet Rollback, das heißt, während der Ausführung der Transaktion tritt ein Fehler auf und die Transaktion kann nicht fortgesetzt werden. Das System macht alle abgeschlossenen Vorgänge in der Datenbank in der Transaktion rückgängig und führt ein Rollback auf den Status durch, in dem die Transaktion gestartet wurde.
Auto-Commit-Transaktionen: Jede einzelne Anweisung ist eine Transaktion. Nach jeder Anweisung erfolgt ein implizites Commit. (Standard)
Explizite Transaktion: beginnt mit der Anzeige der Transaktion und endet mit dem Commit oder Rollback.
Implizite Transaktion: Wenn die Verbindung im impliziten Transaktionsmodus betrieben wird, startet die SQL Server-Datenbank-Engine-Instanz automatisch eine neue Transaktion, nachdem sie die aktuelle Transaktion festgeschrieben oder zurückgesetzt hat. Es ist nicht nötig, den Anfang der Dinge zu beschreiben, sondern einfach jede Transaktion festzuschreiben oder zurückzusetzen. Aber jede Transaktion endet immer noch explizit mit Commit oder Rollback. Nachdem die Verbindung den impliziten Transaktionsmodus auf „Öffnen“ festgelegt hat, wird automatisch eine implizite Transaktion gestartet, wenn die Datenbank-Engine-Instanz zum ersten Mal eine der folgenden Anweisungen ausführt: alter table, insert, create, open, delete, revoke, drop, select , Fetch, Truncate Table, Grant, Update-Transaktion bleiben gültig, bis eine Commit- oder Rollback-Anweisung ausgegeben wird. Nachdem die erste Transaktion festgeschrieben oder zurückgesetzt wurde, startet die Datenbank-Engine-Instanz automatisch eine neue Transaktion, wenn die Verbindung das nächste Mal eine der oben genannten Anweisungen ausführt. Diese Instanz generiert weiterhin implizite Transaktionsketten, bis der implizite Transaktionsmodus deaktiviert wird.
Java JDBC-Transaktionsmechanismus
Schauen wir uns zunächst an, welche großen Probleme uns der bestehende JDBC-Betrieb bereiten wird Nach der Abfrage der Informationen stellt sich heraus, dass es sich um ein einfaches Geschäft handelt und es sehr einfach zu implementieren ist. Wenn dieses Unternehmen jedoch auf einer Multithread-Plattform mit hoher Parallelität platziert wird, treten natürlich Probleme auf Führen Sie eine Änderung aus. Schließlich führt ein Thread auch die Änderungsanweisung aus. Wenn wir die Abfrage erneut ausführen, unterscheiden sich die angezeigten Informationen möglicherweise von den von uns geänderten. Um dieses Problem zu lösen, müssen wir die JDBC-Transaktion einführen Tatsächlich ist die Implementierung des Codes sehr einfach:
private Connection conn = null; private PreparedStatement ps = null; try { conn.setAutoCommit(false); //将自动提交设置为false ps.executeUpdate("修改SQL"); //执行修改操作 ps.executeQuery("查询SQL"); //执行查询操作 conn.commit(); //当两个操作成功后手动提交 } catch (Exception e) { conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功 e.printStackTrace(); }
Theorien im Zusammenhang mit Transaktionen
1. Transaktion)
Atomic Atomic Entweder werden alle Änderungen an den Daten durchgeführt oder keine.
Konsistent (Konsistent) Der Datenstatus bleibt vor und nach der Transaktionsausführung konsistent.
Isoliert Die Verarbeitung einer Transaktion kann sich nicht auf die Verarbeitung einer anderen Transaktion auswirken.
Die dauerhafte Transaktionsverarbeitung wird beendet und ihre Auswirkungen bleiben in der Datenbank bestehen.
2. Mögliche Probleme durch gleichzeitige Transaktionsverarbeitung
Dirty Read (Dirty Read) Eine Transaktion liest Daten, die nicht von einer anderen Transaktion übermittelt wurden,
Nicht wiederholbares Lesen (nicht wiederholbares Lesen) A Der Vorgang einer Transaktion führt dazu, dass eine andere Transaktion vor und nach der Abfrage zweimal unterschiedliche Datenmengen liest
Phantom-Lesen (Phantom-Lesen) Der Vorgang einer Transaktion führt dazu, dass eine andere Transaktion vor und nach der Abfrage zweimal unterschiedliche Datenmengen liest.
Beispiel:
Wenn die Transaktionen A und B gleichzeitig ausgeführt werden,
nachdem Transaktion A aktualisiert wurde, wählt Transaktion B aus, die nicht festgeschriebenen Daten von A zu lesen. Zu diesem Zeitpunkt wird Transaktion A zurückgesetzt, und dann werden die von Transaktion A gelesenen Daten gelesen B ist ungültige „schmutzige“ Daten.
Wenn B-Transaktion das Lesen der Daten auswählt, ändert eine Transaktionsaktualisierungsoperation die von B-Transaktion ausgewählten Daten. Zu diesem Zeitpunkt liest B-Transaktion die Daten erneut und stellt fest, dass die Daten der beiden vorherigen Male unterschiedlich sind.
Nachdem Transaktion B ausgewählt hat, die Daten zu lesen, fügt Transaktion A einen Datensatz ein oder löscht ihn, der die Auswahlbedingungen von Transaktion A erfüllt. Zu diesem Zeitpunkt wählt Transaktion B erneut aus und stellt fest, dass ein Datensatz abgefragt wurde, der beim letzten Mal nicht vorhanden war ( „Phantom“). Oder es fehlt ein bestimmter Datensatz aus der vorherigen Zeit.
JDBCs Transaktionsunterstützung
JDBCs Unterstützung für Transaktionen spiegelt sich in drei Aspekten wider:
1. Auto-Commit-Modus (Auto-Commit-Modus)
Connection bietet ein Auto-Commit-Attribut, um eine Transaktion anzugeben es endet.
a. Wenn die automatische Festschreibung wahr ist und die Ausführung jeder unabhängigen SQL-Operation abgeschlossen ist, wird die Transaktion sofort automatisch übermittelt, was bedeutet, dass jede SQL-Operation eine Transaktion ist.
Wenn eine unabhängige SQL-Operation abgeschlossen ist? Die JDBC-Spezifikation legt dies fest:
Für Datenoperationssprache (DML, wie Einfügen, Aktualisieren, Löschen) und Datendefinitionssprache (wie Erstellen, Löschen), Anweisung eins ausgeführt, gilt es als abgeschlossen.
Bei einer Select-Anweisung gilt die Ausführung als abgeschlossen, wenn das ihr zugeordnete ResultSet-Objekt geschlossen wird.
Wenn bei gespeicherten Prozeduren oder anderen Anweisungen, die mehrere Ergebnisse zurückgeben, alle damit verbundenen ResultSet-Objekte geschlossen werden, werden alle Aktualisierungszähler (die Anzahl der Zeilen, die von Aktualisierungs-, Lösch- und anderen Anweisungsvorgängen betroffen sind) und Ausgabeparameter (Ausgabeparameter der gespeicherte Prozedur) ) erhalten wurden, gilt die Ausführung als abgeschlossen.
b. Wenn die automatische Festschreibung falsch ist, muss jede Transaktion explizit die Festschreibungsmethode zum Festschreiben oder die Rollback-Methode zum Zurücksetzen explizit aufrufen. Der Standardwert für die automatische Festschreibung ist „true“.
JDBC bietet 5 verschiedene Transaktionsisolationsstufen, die in Connection definiert werden.
2. Transaktionsisolationsstufen
JDBC definiert fünf Transaktionsisolationsstufen:
TRANSACTION_NONE Der JDBC-Treiber unterstützt keine Transaktionen
TRANSACTION_READ_UNCOMMITTED ermöglicht Dirty Reads, nicht wiederholbare Lesevorgänge und Phantom Reads.
TRANSACTION_READ_COMMITTED verbietet Dirty Reads, erlaubt aber nicht wiederholbare Lesevorgänge und Phantom Reads.
TRANSACTION_REPEATABLE_READ verbietet Dirty Reads und nicht wiederholbare Reads und führt nur Phantom Reads aus.
TRANSACTION_SERIALIZABLE verbietet Dirty Reads, nicht wiederholbare Reads und Phantom Reads.
3. SavePoint (SavePoint)
JDBC definiert die SavePoint-Schnittstelle, um einen detaillierteren Transaktionskontrollmechanismus bereitzustellen. Wenn ein Sicherungspunkt festgelegt ist, können Sie ein Rollback auf den Status am Sicherungspunkt durchführen, anstatt die gesamte Transaktion zurückzusetzen.
Die Methoden setSavepoint und releaseSavepoint der Connection-Schnittstelle können Sicherungspunkte setzen und freigeben.
Obwohl die JDBC-Spezifikation die oben genannten Unterstützungsverhaltensweisen für Transaktionen definiert, kann jeder JDBC-Treiber und Datenbankhersteller unterschiedliche Unterstützungsstufen für Transaktionen haben. Wenn Sie es im Programm willkürlich festlegen, erzielen Sie möglicherweise nicht den gewünschten Effekt. Zu diesem Zweck stellt JDBC die DatabaseMetaData-Schnittstelle bereit, die eine Reihe von Methoden zum Erhalten der JDBC-Funktionsunterstützung bereitstellt. Beispielsweise kann die Unterstützung für Transaktionsisolationsstufen über die Methode DatabaseMetaData.supportsTransactionIsolationLevel bestimmt werden, und die Unterstützung für Sicherungspunkte kann über die Methode DatabaseMetaData.supportsSavepoints bestimmt werden.
Das obige ist der detaillierte Inhalt vonSpring Transaction (JDBC) für Transaktionen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!