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!