Heim >Datenbank >MySQL-Tutorial >Wie führe ich SELECT-Anweisungen in MySQL ohne Sperren aus?

Wie führe ich SELECT-Anweisungen in MySQL ohne Sperren aus?

DDD
DDDOriginal
2024-12-14 18:33:12402Durchsuche

How to Run SELECT Statements in MySQL Without Locking?

So führen Sie SELECT-Anweisungen aus, ohne Sperren in MySQL zu verursachen

In MySQL kann die Ausführung von SELECT-Anweisungen manchmal Sperren auslösen, insbesondere wenn die zugrunde liegende Tabelle wird gleichzeitig geändert. Dies kann problematisch sein, insbesondere bei Slave-Datenbanken, die auf Binlogging basieren.

Eine mögliche Lösung, die im bereitgestellten Artikel vorgeschlagen wird, ist die Verwendung des Modifikators „NOLOCK“. Allerdings unterstützt MySQL kein entsprechendes Schlüsselwort. Stattdessen können Sie den gleichen Effekt erzielen, indem Sie die Transaktionsisolationsstufe anpassen.

Lösung: Nicht festgeschriebene Transaktionsisolationsstufe lesen

Um Sperren beim Ausführen von SELECT-Anweisungen zu vermeiden, können Sie dies tun Setzen Sie die Transaktionsisolationsstufe auf „READ UNCOMMITTED“. Dadurch können nicht festgeschriebene Transaktionen sichtbar gemacht werden, wodurch verhindert wird, dass Sperren auftreten. So geht's:

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT COUNT(online.account_id) cnt from online;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Slave-Datenbankkompatibilität

Bei Verwendung der Isolationsstufe READ UNCOMMITTED für eine Slave-Datenbank kann der Fehler „Binär“ auftreten Protokollierung nicht möglich...Transaktionsebene „READ-UNCOMMITTED“ in InnoDB ist für den Binlog-Modus „STATEMENT“ nicht sicher. Um dieses Problem zu beheben, Sie können die Datei my.cnf in der Masterdatenbank ändern, um die Transaktionsisolationsstufe „READ UNCOMMITTED“ für Binlogging zu aktivieren.

Alternative Lösung

Alternativ können Sie verwenden Verwenden Sie die folgende Technik, anstatt die Isolationsstufe festzulegen:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT COUNT(online.account_id) cnt from online;
COMMIT;

Dadurch wird die Abfrage gezwungen, nicht festgeschriebene Daten zu lesen und diese dann sofort festzuschreiben Transaktion, wodurch mögliche Sperren oder Konflikte verhindert werden.

Beachten Sie, dass die Verwendung der Isolationsstufe READ UNCOMMITTED den Zugriff auf nicht festgeschriebene Daten ermöglicht, was zu Dateninkonsistenzen führen kann. Es ist wichtig, die potenziellen Risiken zu berücksichtigen und bei Bedarf vorsichtig damit umzugehen.

Das obige ist der detaillierte Inhalt vonWie führe ich SELECT-Anweisungen in MySQL ohne Sperren aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn