Heim  >  Artikel  >  Datenbank  >  Was ist der Grund, warum MySQL die Tabelle sperrt?

Was ist der Grund, warum MySQL die Tabelle sperrt?

WBOY
WBOYOriginal
2022-01-20 10:30:5811486Durchsuche

In MySQL besteht der Grund für das Sperren der Tabelle darin, dass die Ressource zu diesem Zeitpunkt ausgelastet ist, wenn ein Programm vor dem Festschreiben den Einfüge-, Aktualisierungs- oder Löschvorgang für die Tabelle ausführt und ein anderes Programm denselben Vorgang für dieselbe Tabelle ausführt . Ausnahme, also Sperrtabelle.

Was ist der Grund, warum MySQL die Tabelle sperrt?

Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.

Was ist der Grund für die MySQL-Sperrtabelle?

Sperre ist ein Mechanismus, mit dem Computer mehrere Prozesse oder Threads koordinieren können, um gleichzeitig auf eine bestimmte Ressource zuzugreifen.

In einer Datenbank sind Daten neben dem Wettbewerb um herkömmliche Rechenressourcen (wie CPU, RAM, I/O usw.) auch eine Ressource, die von vielen Benutzern gemeinsam genutzt wird.

Die Sicherstellung der Konsistenz und Effektivität des gleichzeitigen Datenzugriffs ist ein Problem, das alle Datenbanken lösen müssen. Sperrkonflikte sind ebenfalls ein wichtiger Faktor, der sich auf die Leistung des gleichzeitigen Datenbankzugriffs auswirkt.

Aus dieser Sicht sind Sperren für Datenbanken besonders wichtig und komplex.

Gründe für die Tabellensperre

1. Das Prinzip der Tabellensperre besteht darin, dass die Datenbank einen exklusiven Blockierungsmechanismus verwendet gesperrt. Bis ein Commit oder ein Rollback erfolgt oder der Datenbankbenutzer beendet wird.

Zuerst führt Programm A eine Einfügung für Tabelle A durch, und bevor ein Commit erfolgt, führt Programm B auch eine Einfügung für Tabelle A durch auftreten, was eine Tabellensperre ist.

Zweitens erfolgt die Tabellensperre häufig in Parallelität und nicht in Parallelität (parallel kann der andere Thread das Datenbank-, CPU- und E/A-Zuweisungsprinzip nicht ausführen)

3. Reduzieren Sie die Wahrscheinlichkeit einer Tabellensperre:

  Reduzieren Sie die Zeit zwischen der Ausführung von Einfüge-, Aktualisierungs- und Löschanweisungen und dem Festschreiben.

Konkret wird die Stapelausführung auf Einzelausführung umgestellt und die Nichtausführungsgeschwindigkeit von SQL selbst optimiert.

Beispiele sind wie folgt:


Update verwenden

Angenommen, dass kid ein Indexfeld und ein Wert der Tabelle ist, nicht eindeutig:

 1): Wenn kid mehrere Datensätze mit einem Wert von 12 hat:

 Update table set name='feie' where kid=12; wird gesperrt

 2): Wenn kid einen eindeutigen Wert hat. Wenn der Datensatz 1 ist, dann:

 Update table set name='feie' where kid=1; Stellen Sie sicher, dass der Datensatz eindeutig ist Wenn der Indexwert nicht eindeutig ist, wird die Tabelle gesperrt. Andernfalls wird die Zeile gesperrt.

Verwenden Sie delete

 Wenn es zwei Löschvorgänge gibt: kid1 und kid2 sind Indexfelder

 1): Anweisung 1 aus Tabelle löschen, wobei kid1=1 und kid2=2;

 2): Anweisung 2 aus Tabelle löschen, wobei kid1= 1 und kid2=3;

    # Durch solche zwei Löschvorgänge wird die Tabelle nicht gesperrt

 1): Anweisung 1 aus Tabelle löschen, wobei kid1=1 und kid2=2;

 2): Anweisung 2 aus Tabelle löschen, wobei kid1=1 ;

   # Solche zwei Löschvorgänge sperren die Tabelle

Zusammenfassung: Wenn dieselbe Tabelle gelöscht wird, versuchen Sie, die Löschbedingungen einheitlich zu gestalten, da sie sich sonst gegenseitig beeinflussen und dazu führen, dass die Tabelle gesperrt wird

Empfohlenes Lernen:

MySQL Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Grund, warum MySQL die Tabelle sperrt?. 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