PHP-MySQL- und MySQL-Transaktionsnutzung und Betriebsvergleich

巴扎黑
Freigeben: 2023-03-07 22:06:02
Original
1566 Leute haben es durchsucht

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();
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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();
}
Nach dem Login kopieren
Hinweis

Nur ​​Datentabellen vom Typ INNODB und BDB in MYSQL können die Transaktionsverarbeitung unterstützen! Andere Typen werden nicht unterstützt!

***: Im Allgemeinen ist die Standard-Engine der MYSQL-Datenbank MyISAM. Diese Engine unterstützt keine Transaktionen! Wenn Sie möchten, dass MYSQL Transaktionen unterstützt, können Sie es manuell selbst ändern:

Die Methode ist wie folgt: 1. Ändern Sie die Datei c:/appserv/mysql/my.ini, suchen Sie skip-InnoDB und fügen Sie # hinzu. vorne und speichern Sie die Datei.

2. Geben Sie während des Betriebs „services.msc“ ein, um den MySQL-Dienst neu zu starten.

3. Gehen Sie zu phpmyadmin, mysql->show-Engines (oder führen Sie mysql->show-Variablen wie „have_%“ aus) und überprüfen Sie InnoDB auf JA, was bedeutet, dass die Datenbank InnoDB unterstützt.

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage