MySQL-Transaktionsverarbeitung mit hoher Parallelität und Sperrung
MySQL verwendet SELECT … FOR UPDATE zur Bestätigung vor dem Schreiben der Transaktion
Am Beispiel von MySQLs InnoDB ist die Standardisolationsstufe von Tansaction REPEATABLE READ. Es gibt zwei Haupttypen von Lesesperren in der SELECT-Methode:
SELECT … LOCK IN SHARE MODE SELECT … FOR UPDATE
Diese beiden Methoden müssen auf die Übermittlung anderer Transaktionsdaten warten (Commit), bevor sie ausgeführt werden, wenn eine SELECT-Operation für dieselbe Datentabelle ausgeführt wird. Der Hauptunterschied besteht darin, dass LOCK IN SHARE MODE leicht zu einem Deadlock führen kann, wenn eine Partei dasselbe Formular aktualisieren möchte.
Um es einfach auszudrücken: Wenn Sie dasselbe Formular nach SELECT AKTUALISIEREN möchten, verwenden Sie am besten SELECT ... UPDATE.
Zum Beispiel: Angenommen, es gibt eine Menge in der Produktform „Produkte“, um die Menge des Produkts zu speichern. Bevor die Bestellung erstellt wird, muss festgestellt werden, ob die Menge des Produkts ausreicht (Menge>0). , und dann wird die Menge auf 1 aktualisiert.
Unsichere Praktiken:
1 SELECT quantity FROM products WHERE id=3; 1 UPDATE products SET quantity = 1 WHERE id=3;
Warum ist es unsicher?
In einigen wenigen Fällen kann es kein Problem geben, aber beim Zugriff auf große Datenmengen wird es auf jeden Fall Probleme geben.
Wenn wir den Lagerbestand abziehen müssen, wenn die Menge> 0 ist, gehen wir davon aus, dass die vom Programm in der ersten SELECT-Zeile gelesene Menge 2 ist. Es scheint, dass die Zahl korrekt ist, aber wenn MySQL sich auf das UPDATE vorbereitet, hat jemand jemanden Möglicherweise wurde der Bestand auf 0 abgezogen, aber das Programm wusste es nicht und führte das falsche UPDATE durch.
Daher muss ein Transaktionsmechanismus verwendet werden, um sicherzustellen, dass die gelesenen und übermittelten Daten korrekt sind.
Damit wir es in MySQL so testen können: (Hinweis 1)
1 SET AUTOCOMMIT=0; 2 BEGIN WORK; 3 SELECT quantity FROM products WHERE id=3 FOR UPDATE;
Zu diesem Zeitpunkt sind die Daten mit der ID=3 im Produktdaten sind gesperrt (Hinweis 3) Andere Transaktionen müssen warten, bis diese Transaktion festgeschrieben wird, bevor sie ausgeführt werden. SELECT * FROM products WHERE id=3 FOR UPDATE (Hinweis 2) Dadurch wird sichergestellt, dass die in anderen Transaktionen nach Menge gelesene Anzahl korrekt ist.
1 UPDATE products SET quantity = '1' WHERE id=3 ; 2 COMMIT WORK;
Commit wird in die Datenbank geschrieben und Produkte werden entsperrt.
Hinweis 1: BEGIN/COMMIT ist der Start- und Endpunkt der Transaktion. Sie können mehr als zwei MySQL-Befehlsfenster verwenden, um den Sperrstatus interaktiv zu beobachten.
Hinweis 2: Während einer Transaktion wird nur SELECT... FOR UPDATE oder LOCK IN SHARE MODE für die gleichen Daten auf den Abschluss anderer Transaktionen warten, bevor SELECT... ausgeführt wird dadurch.
Hinweis 3: Da InnoDB standardmäßig die Sperre auf Zeilenebene verwendet, lesen Sie bitte diesen Artikel zum Sperren von Datenspalten.
Hinweis 4: Versuchen Sie, die LOCK TABLES-Anweisung nicht in InnoDB-Formularen zu verwenden. Wenn Sie sie als letzten Ausweg verwenden müssen, lesen Sie bitte die offiziellen Anweisungen zur Verwendung von LOCK TABLES in InnoDB, um häufige Deadlocks im System zu vermeiden .
Das Obige ist der Inhalt der MySQL-Transaktionsverarbeitung mit hoher Parallelität. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

Navicat selbst speichert das Datenbankkennwort nicht und kann das verschlüsselte Passwort nur abrufen. Lösung: 1. Überprüfen Sie den Passwort -Manager. 2. Überprüfen Sie Navicats "Messnot Password" -Funktion; 3.. Setzen Sie das Datenbankkennwort zurück; 4. Kontaktieren Sie den Datenbankadministrator.

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

Durch das Kopieren einer Tabelle in MySQL müssen neue Tabellen erstellt, Daten eingefügt, Fremdschlüssel festgelegt, Indizes, Auslöser, gespeicherte Verfahren und Funktionen kopiert werden. Zu den spezifischen Schritten gehören: Erstellen einer neuen Tabelle mit derselben Struktur. Fügen Sie Daten aus der ursprünglichen Tabelle in eine neue Tabelle ein. Legen Sie die gleiche fremde Schlüsselbeschränkung fest (wenn die Originaltabelle eine hat). Erstellen Sie den gleichen Index. Erstellen Sie denselben Auslöser (wenn die ursprüngliche Tabelle eine hat). Erstellen Sie dieselbe gespeicherte Prozedur oder Funktion (wenn die ursprüngliche Tabelle verwendet wird).

Zeigen Sie die MySQL -Datenbank mit dem folgenden Befehl an: Verbindung zum Server: MySQL -U -Benutzername -P -Kennwort ausführen STEILE -Datenbanken; Befehl zum Abrufen aller vorhandenen Datenbanken auswählen Datenbank: Verwenden Sie den Datenbanknamen. Tabelle Ansicht: Tabellen anzeigen; Tabellenstruktur anzeigen: Beschreiben Sie den Tabellennamen; Daten anzeigen: Wählen Sie * aus Tabellenname;

Navicat für MariADB kann das Datenbankkennwort nicht direkt anzeigen, da das Passwort in verschlüsselter Form gespeichert ist. Um die Datenbanksicherheit zu gewährleisten, gibt es drei Möglichkeiten, Ihr Passwort zurückzusetzen: Setzen Sie Ihr Passwort über Navicat zurück und legen Sie ein komplexes Kennwort fest. Zeigen Sie die Konfigurationsdatei an (nicht empfohlen, ein hohes Risiko). Verwenden Sie Systembefehlsleitungs -Tools (nicht empfohlen, Sie müssen die Befehlszeilen -Tools beherrschen).

Schritte zur Durchführung von SQL in Navicat: Verbindung zur Datenbank herstellen. Erstellen Sie ein SQL -Editorfenster. Schreiben Sie SQL -Abfragen oder Skripte. Klicken Sie auf die Schaltfläche Ausführen, um eine Abfrage oder ein Skript auszuführen. Zeigen Sie die Ergebnisse an (wenn die Abfrage ausgeführt wird).

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.
