Detaillierte Code-Erklärung der Transaktionsverarbeitung in MySQL
Dieser Artikel stellt hauptsächlich die detaillierte Erklärung der Transaktionsverarbeitung in MySQL vor. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz geben . Folgen wir dem Editor und werfen wir einen Blick darauf
Schritte:
1. Transaktion starten Transaktion starten
Wenn wir eine Transaktion starten, werden alle unsere SQL-Operationen im Speicher ausgeführt, aber es gibt keine wirkliche Rückmeldung an die Datei auf der Datenbankfestplatte!
2. Rollback Rollback
Rollback ist die Wiederherstellung des ursprünglichen Zustands vor Beginn der Transaktion!
Hinweis: Der Rollback-Vorgang schließt eine Transaktion automatisch. Wenn Sie die Transaktion erneut ausführen möchten, müssen Sie die Transaktion erneut öffnen!
3. Senden Commit
Grundprinzipien von Transaktionen
Der Grund, warum die normale Ausführung sofort ausgeführt wird und wirksam wird, liegt darin, dass MySQL standardmäßig die Ausführung von SQL-Anweisungen automatisch übermittelt! Daher besteht das Wesentliche beim Öffnen einer Transaktion darin, die vorherige automatische Übermittlungsfunktion zu deaktivieren und sie stattdessen manuell (mithilfe der Commit-Anweisung) durch den Benutzer zu übermitteln!
Fassen Sie die Schritte der Transaktion zusammen:
1, Öffnen Sie die Transaktion
2, Wenn die Ausführung erfolgreich ist, senden Sie einfach
ab3. Wenn eine SQL-Anweisung nicht ausgeführt werden kann, führen Sie einen Rollback durch!
Die typischste Transaktionsverarbeitung ist das Ausleihen und Zurückzahlen von Geld. Das Folgende ist ein Beispiel dafür, wie Zhang San 1.000 Yuan an Li Si zurückgibt
Überprüfen Sie zunächst die jeweiligen Geldbeträge in der Datenbank
Das Folgende ist der Code zur Abwicklung der Rückzahlungstransaktion:
<span style='font-size: 14px; font-family: 微软雅黑, "Microsoft YaHei";'><?<span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;">php </span><span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);">/** * MySQL实现事务操作<br/>*/<br/><br/></span><span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);">echo</span> "<meta charset=utf-8>"<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>;<br><br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>// 1 连接数据库<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$link</span> = @<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_connect</span>('localhost','root','') or <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>die</span>('连接数据库失败'<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>);<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_select_db</span>('test',<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$link</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>);</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_query</span>('set names utf8'<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>);<br><br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>// 2 开启事务<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_query</span>("start transaction"<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>);<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>//设置一个变量,用来判断所有sql语句是否成功<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$flag</span> = <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>true</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>;<br><br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>// 2.1执行事务中的一组sql语句 <br><br>// 李四的money+1000<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$sql</span> = "update pdo set mone=money+1000 where name='李四'"<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>;<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$res</span> = <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_query</span>(<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$sql</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>);<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>if</span> (!<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$res</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>) { <br> </span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>//若sql语句执行失败,把$falg设置为false</span> <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$flag</span> = <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>false</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>; }<br><br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>//张三的money-1000<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$sql</span> = "update pdo set money=money-1000 where name='张三'"<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>;<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$res</span> = <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_query</span>(<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$sql</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>);<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>if</span> (!<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$res</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>) { <br> </span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>//若sql语句执行失败,把$falg设置为false</span> <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$flag</span> = <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>false</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>; }<br><br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>// 2.2 判断事务是否执行成功<br></span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>if</span> (<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(128, 0, 128);'>$flag</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>) { <br> </span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>//所有sql语句执行成功,把sql语句提交</span> <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_query</span>('commit'<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>); </span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>echo</span> "还钱成功!"<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>; }</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>else</span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>{ <br> </span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 0);'>// 如其中一条执行失败,则回滚到事务开启之前的状态</span> <span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 128, 128);'>mysql_query</span>('rollback'<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>); </span><span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 255);'>echo</span> "还钱失败!"<span style='font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px; margin: 0px; padding: 0px; line-height: 1.5;'>; }</span></span>
Ergebnis:
Unten schreiben wir bewusst eines der Felder falsch, um zu sehen, ob das Die Transaktion wird normal in der Datenbank verarbeitet. Hat sich der Geldbetrag geändert?
<span style='font-size: 14px; font-family: 微软雅黑, "Microsoft YaHei";'>// 李四的money+1000<br>$sql = "update pdo set mone=money+1000 where name='李四'"; //把moeny字段错写成mone<br></span>
Ergebnis:
Das Ergebnis ist Trotzdem ist das Geld fehlgeschlagen und die entsprechenden Geldbeträge in der Datenbank haben sich nicht geändert. Dies bedeutet, dass die Transaktion nicht festgeschrieben wird, sondern zurückgesetzt wird, um die Daten auf den ursprünglichen Zustand wiederherzustellen Das Starten der Transaktion ist auch die Aufgabe der Verwendung von Transaktionen. Das heißt, Die Transaktion wird nur dann übermittelt, wenn alle SQL-Anweisungen erfolgreich ausgeführt wurden.
Das obige ist der detaillierte Inhalt vonDetaillierte Code-Erklärung der Transaktionsverarbeitung in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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



Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

MySQL ist ein Open Source Relational Database Management -System, das hauptsächlich zum schnellen und zuverlässigen Speicher und Abrufen von Daten verwendet wird. Sein Arbeitsprinzip umfasst Kundenanfragen, Abfragebedingungen, Ausführung von Abfragen und Rückgabergebnissen. Beispiele für die Nutzung sind das Erstellen von Tabellen, das Einsetzen und Abfragen von Daten sowie erweiterte Funktionen wie Join -Operationen. Häufige Fehler umfassen SQL -Syntax, Datentypen und Berechtigungen sowie Optimierungsvorschläge umfassen die Verwendung von Indizes, optimierte Abfragen und die Partitionierung von Tabellen.

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

Die Position von MySQL in Datenbanken und Programmierung ist sehr wichtig. Es handelt sich um ein Open -Source -Verwaltungssystem für relationale Datenbankverwaltung, das in verschiedenen Anwendungsszenarien häufig verwendet wird. 1) MySQL bietet effiziente Datenspeicher-, Organisations- und Abruffunktionen und unterstützt Systeme für Web-, Mobil- und Unternehmensebene. 2) Es verwendet eine Client-Server-Architektur, unterstützt mehrere Speichermotoren und Indexoptimierung. 3) Zu den grundlegenden Verwendungen gehören das Erstellen von Tabellen und das Einfügen von Daten, und erweiterte Verwendungen beinhalten Multi-Table-Verknüpfungen und komplexe Abfragen. 4) Häufig gestellte Fragen wie SQL -Syntaxfehler und Leistungsprobleme können durch den Befehl erklären und langsam abfragen. 5) Die Leistungsoptimierungsmethoden umfassen die rationale Verwendung von Indizes, eine optimierte Abfrage und die Verwendung von Caches. Zu den Best Practices gehört die Verwendung von Transaktionen und vorbereiteten Staten

MySQL wird für seine Leistung, Zuverlässigkeit, Benutzerfreundlichkeit und Unterstützung der Gemeinschaft ausgewählt. 1.MYSQL bietet effiziente Datenspeicher- und Abruffunktionen, die mehrere Datentypen und erweiterte Abfragevorgänge unterstützen. 2. Übernehmen Sie die Architektur der Client-Server und mehrere Speichermotoren, um die Transaktion und die Abfrageoptimierung zu unterstützen. 3. Einfach zu bedienend unterstützt eine Vielzahl von Betriebssystemen und Programmiersprachen. V.

Apache verbindet eine Verbindung zu einer Datenbank erfordert die folgenden Schritte: Installieren Sie den Datenbanktreiber. Konfigurieren Sie die Datei web.xml, um einen Verbindungspool zu erstellen. Erstellen Sie eine JDBC -Datenquelle und geben Sie die Verbindungseinstellungen an. Verwenden Sie die JDBC -API, um über den Java -Code auf die Datenbank zuzugreifen, einschließlich Verbindungen, Erstellen von Anweisungen, Bindungsparametern, Ausführung von Abfragen oder Aktualisierungen und Verarbeitungsergebnissen.

Die Installation von MySQL auf CentOS umfasst die folgenden Schritte: Hinzufügen der entsprechenden MySQL Yum -Quelle. Führen Sie den Befehl mySQL-server aus, um den MySQL-Server zu installieren. Verwenden Sie den Befehl mySQL_SECURE_INSTALLATION, um Sicherheitseinstellungen vorzunehmen, z. B. das Festlegen des Stammbenutzerkennworts. Passen Sie die MySQL -Konfigurationsdatei nach Bedarf an. Tune MySQL -Parameter und optimieren Sie Datenbanken für die Leistung.

Der Prozess des Startens von MySQL in Docker besteht aus den folgenden Schritten: Ziehen Sie das MySQL -Image zum Erstellen und Starten des Containers an, setzen
