Aktueller Standort: Startseite> Neueste Artikel> Wie setze und passen Sie die Isolationsstufe einer Transaktion in MySQLI :: begin_transaktion ein?

Wie setze und passen Sie die Isolationsstufe einer Transaktion in MySQLI :: begin_transaktion ein?

gitbox 2025-06-17

In PHP ist die MySQLI -Erweiterung eines der am häufigsten verwendeten Tools, um mit einer Datenbank zu interagieren, wenn eine MySQL -Datenbank verwendet wird. Wenn wir Transaktionen benötigen, die Datenbankvorgänge erfordern, bietet die MySQLI :: Beginn_transaction -Methode einen Mechanismus zur Steuerung des Beginns einer Transaktion. Zusätzlich zum einfachen Öffnen von Transaktionen ist das Isolationsniveau einer Transaktion auch eine sehr wichtige Überlegung, da sie direkt das Lese- und Verriegelungsverhalten von Daten beeinflusst.

In diesem Artikel wird untersucht, wie das Isolationsniveau der Transaktionen in MySQLI :: begin_transaktion festgelegt und anpassen und die Rolle und die anwendbaren Szenarien verschiedener Isolationsstufen erläutert.

Was ist das Isolationsniveau einer Transaktion?

Die Transaktions -Isolationsstufe definiert die Sichtbarkeit von Operationen in einer Transaktion zu anderen Transaktionen. Unterschiedliche Isolationsstufen bestimmen, wie Daten bei Ausführung einer Transaktion mit anderen gleichzeitigen Transaktionen interagieren. Es gibt hauptsächlich vier Transaktions -Isolationswerte:

  1. Lesen Sie Uncombit : Mit der niedrigsten Isolationsstufe können Transaktionen Daten aus anderen nicht verbindlichen Transaktionen lesen. Dies kann zu schmutzigen Lesevorgängen, nicht wiederholbaren Lesevorgängen und Phantom-Lesevorgängen führen.

  2. Lesen Sie engagiert (gelesen engagiert) : Transaktionen können nur festgelegte Daten lesen. Obwohl das schmutzige Lesen vermieden wird, können Sie immer noch nicht wiederholbares Lesen und Phantom-Lesen begegnen.

  3. Wiederholbares Lesen : Während der Ausführung der Transaktion werden alle Lesezeilendaten gesperrt und andere Transaktionen können diese Zeilen nicht ändern. Schmutziges Lesen und nicht wiederholbares Lesen werden vermieden, aber es kann immer noch Phantom-Lesen auftreten.

  4. Serialisierbar (serialisierbar) : Die höchste Isolationsniveau sind alle Transaktionen vollständig isoliert, und es wird kein schmutziges Lesen, nicht wiederholbare Lektüre und Phantom-Lesen geben. Niedrige Leistung, sorgt jedoch für die Konsistenz und Integrität von Daten.

Wie setze ich die Isolationsstufe einer Transaktion in MySQLI :: begin_transaktion fest?

In MySQLI können wir die Isolationsstufe der Transaktion durch die MySQLI :: Set_Charset -Methode festlegen. Normalerweise muss dies unter Verwendung der SQL -Anweisung der Transaktions -Isolationsstufe festgelegt werden, bevor er begann_transaktion aufruft.

Hier sind die Schritte zum Einstellen und Anpassen der Transaktions -Isolationsstufe:

1. Erstellen Sie eine Datenbankverbindung

Erstellen Sie zunächst eine Verbindung zur MySQL -Datenbank:

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}
</span></span>

2. Stellen Sie den Isolationsniveau der Transaktion ein

Vor dem Aufrufen von beginn_transaktion können SQL -Anweisungen verwendet werden, um die Isolationsstufe der Transaktion anzugeben. Zum Beispiel, um die wiederholbare Lese -Isolationsstufe einzustellen:

 <span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SET TRANSACTION ISOLATION LEVEL REPEATABLE READ"</span></span><span>);
</span></span>

Sie können nach Bedarf die entsprechende Isolationsstufe auswählen.

3. Starten Sie eine Transaktion

Starten Sie nach Einstellung der Isolationsstufe der Transaktion die Transaktion mit Beginn_transaction :

 <span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">begin_transaction</span></span><span>();
</span></span>

4. Führen Sie Transaktionsvorgänge durch

Führen Sie eine Reihe von Datenbankoperationen in einer Transaktion aus:

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// Datenbankvorgänge durchführen</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2')"</span></span><span>);

    </span><span><span class="hljs-comment">// Transaktionen einreichen</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// Wenn etwas schief geht,Rollen Sie Transaktionen zurück</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rollback</span></span><span>();
}
</span></span>

5. Beenden Sie die Transaktion

Abhängig von der Transaktionsausführung können Sie die Transaktion festlegen oder zurückführen:

  • Verwenden Sie $ mysqli-> commit (), um die Transaktion zu begehen.

  • Verwenden Sie $ MySQLI-> Rollback (), um die Transaktion zurückzurollen.

Beispiel: Komplett Code

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Erstellen Sie eine Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Setzen Sie die Transaktions -Isolationsstufe</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"</span></span><span>);

</span><span><span class="hljs-comment">// Starten Sie eine Transaktion</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">begin_transaction</span></span><span>();

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// Führen Sie einige Datenbankvorgänge aus</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO products (name, price) VALUES ('product1', 100)"</span></span><span>);
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"UPDATE products SET price = 150 WHERE name = 'product2'"</span></span><span>);

    </span><span><span class="hljs-comment">// Transaktionen einreichen</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Transaktionseinreichung erfolgreich!"</span></span><span>;
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// Rollen Sie Transaktionen zurück</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rollback</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Transaktionsrollback: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}

</span><span><span class="hljs-comment">// Schließen Sie die Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Auswahl der Isolationsstufe

Die Auswahl des geeigneten Isolationsniveaus hängt häufig von den Geschäftsanforderungen und dem Systemverkehr ab. Hier sind einige Vorschläge für gemeinsame Szenarien:

  • Hoher Anfragebetrieb mit hoher Parallelität : Wählen Sie Lesen Sie die festgelegten oder wiederholbaren Lesen aus, um Leistung und Datenkonsistenz auszugleichen.

  • Die Datenkonsistenz muss streng garantiert werden : Wählen Sie serialisierbar , wodurch sichergestellt wird, dass Transaktionen vollständig isoliert sind, die Leistung jedoch stark beeinträchtigt wird.

  • Anwendungen mit hohen Leistungsanforderungen : Im Fall von hohen Leistungsanforderungen können Sie unbekannt lesen , aber vorsichtig mit dem Leseproblem.

Zusammenfassen

Bei Verwendung der MySQLI -Erweiterung in PHP ist das Einstellen des Isolationsniveaus einer Transaktion eine sehr wichtige Operation. Durch die Verwendung der Anweisung "Set Transaction Isolation Level" können wir die Isolationsstufe vor MySQLI :: begin_transaktion anpassen, um die Zuverlässigkeit und Konsistenz der Transaktionsausführung sicherzustellen. Die Auswahl der geeigneten Isolationsstufe hat einen wichtigen Einfluss auf die Datenbankleistung und die Datenkonsistenz. Während des Entwicklungsprozesses sollte die entsprechende Transaktions -Isolationsebene entsprechend den Geschäftsbedürfnissen sorgfältig ausgewählt werden.