Erstens ist die MySQL-Verbindung eine permanente Verbindung, während MySQL eine nicht permanente Verbindung ist. Was bedeutet es? Immer wenn die MySQL-Verbindung zum zweiten Mal verwendet wird, wird ein neuer Prozess erneut geöffnet, während MySQL nur denselben Prozess verwendet, was den Druck auf der Serverseite erheblich verringern kann
MySQL kapselt Transaktionen usw. Einige fortgeschrittene Operationen kapseln auch viele verfügbare Methoden im DB-Operationsprozess.
Die häufigste Anwendung sind MySQL-Transaktionen.
Zum Beispiel das folgende Beispiel:
Der Code lautet wie folgt:
$mysqli = new mysqli('localhost','root','','DB_Lib2Test'); $mysqli->autocommit(false);//开始事物 $mysqli->query($sql1); $mysqli->query($sql2); if(!$mysqli->errno){ $mysqli->commit(); echo 'ok'; }else{ echo 'err'; $mysqli->rollback(); }
In PHP hat MySQL die MySQL-Transaktion gut gekapselt damit verbundene Arbeiten. Das folgende Beispiel:
Der Code lautet wie folgt:
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'"; $sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)"; $mysqli = new mysqli('localhost','root','','DB_Lib2Test'); $mysqli->autocommit(false); // 开始事务 $mysqli->query($sql1); $mysqli->query($sql2); if (!$mysqli->errno) { $mysqli->commit(); echo 'ok'; } else { echo 'err'; $mysqli->rollback(); }
Hier verwenden wir die PHP-MySQL-Funktionsreihe, um Transaktionen durchzuführen.
Der Code lautet wie folgt:
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'"; $sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)"; $conn = mysql_connect('localhost','root',''); mysql_select_db('DB_Lib2Test'); mysql_query('start transaction'); //mysql_query('SET autocommit=0'); mysql_query($sql1); mysql_query($sql2); if (mysql_errno()) { mysql_query('rollback'); echo 'err'; } else { mysql_query('commit'); echo 'ok'; } // mysql_query('SET autocommit=1'); // mysql_query($sql3);
Hier ist zu beachten, dass
MyISAM: keine Transaktionen unterstützt und für schreibgeschützte Programme verwendet wird um die Leistung zu verbessern
InnoDB: Unterstützt ACID-Transaktionen, Sperren auf Zeilenebene und Parallelität
Berkeley DB: unterstützt Transaktionen
Noch etwas zu beachten: Das Standardverhalten von MySQL besteht darin, nach jeder SQL-Anweisung eine COMMIT-Anweisung auszuführen ausgeführt, wodurch jede einzelne Anweisung effektiv in eine Transaktion umgewandelt wird.
Aber wenn wir Transaktionen verwenden müssen, müssen wir oft mehrere SQL-Anweisungen ausführen. Dazu müssen wir das Autocommit-Attribut von MySQL manuell auf 0 setzen, was standardmäßig 1 ist.
Verwenden Sie gleichzeitig die START TRANSACTION-Anweisung, um explizit eine Transaktion zu eröffnen. Wie das Beispiel oben.
Was sind die Konsequenzen, wenn Sie dies nicht tun?
Wir werden die Kommentare //mysql_query(‘SET autocommit=0′); und // mysql_query($sql3); im zweiten Codeabschnitt oben entfernen und dann ausführen.
Zu diesem Zeitpunkt wird mysql_query($sql3) bei der Ausführung nicht in die Datenbank eingefügt.
Wenn wir den Kommentar // mysql_query(‘SET autocommit=1′); entfernen, wird mysql_query($sql3); erfolgreich ausgeführt.
Normalerweise wird eine Transaktion abgeschlossen, wenn eine COMMIT- oder ROLLBACK-Anweisung ausgeführt wird, aber einige DDL-Anweisungen lösen implizit COMMIT aus.
Zum Beispiel die folgende Anweisung
ALTER FUNCTION
ALTER PROCEDURE
ALTER TABLE
BEGIN
CREATE DATABASE
CREATE FUNCTION
CREATE INDEX
VERFAHREN ERSTELLEN
TABELLE ERSTELLEN
DATENBANK DROP
DROP-FUNKTION
INDEX DROP
TABELLE UMBENENNEN
TABELLE ABZÜHLEN
AUTOCOMMIT=1 SETZEN
TRANSAKTION STARTEN
Nehmen wir ein anderes Beispiel.
Der Code lautet wie folgt:
Wenn im obigen Beispiel $sql2 nicht ausgeführt werden kann, wird $sql1 trotzdem ausgeführt. Warum?
Denn wenn die Umbenennung ausgeführt wird, führt MySQL standardmäßig zuerst das Festschreiben und dann die Umbenennung aus.
$sql1 = 'create table ScoreDetail_new(id int)'; $sql2 = 'rename table ScoreDetail to ScoreDetail_bak'; $sql3 = 'rename table ScoreDetail_new to ScoreDetail'; $mysqli = new mysqli('localhost','root','','DB_Lib2Test'); $mysqli->autocommit(false);//开始事物 $mysqli->query($sql1); $mysqli->query($sql2); $mysqli->query($sql3); if (!$mysqli->errno) { $mysqli->commit(); echo 'ok'; } else { echo 'err'; $mysqli->rollback(); }
Das bedeutet, dass Transaktionstransaktionen unterstützt werden.
Das obige ist der detaillierte Inhalt vonPHP-MySQL- und MySQL-Transaktionsnutzung und Betriebsvergleich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!