Artikelkatalog
MySQL-databasTransaktionsåterställningsisolering/öppet koncept/nivåbearbetning php-uttalande
MySQL Frågor
MySQL-transaktioner används främst för att behandla data med en stor mängd operationer och hög komplexitet.Till exempel, i personalledningssystemet, om du tar bort en person, måste du radera både den grundläggande informationen om personen och informationen relaterad till personen, såsom brevlådor, artiklar etc. På detta sätt kan dessa databasoperationssatser radera utgör en transaktion!
- Transaktioner stöds i MySQL endast för databaser eller tabeller som använder Innodbs databasmotor.
- Transaktionsbearbetning kan användas för att upprätthålla databasens integritet, vilket säkerställer att grupper av SQL-satser antingen exekveras alla eller att ingen av dem exekveras.
- Transaktioner används för att hantera infoga, uppdatera, ta bort uttalanden
Generellt sett måste transaktioner uppfylla fyra villkor (ACID): Atomicitet (atomicitet), Konsistens (stabilitet), Isolering (isolering), Hållbarhet (tillförlitlighet)
- 1,Atomicitet för transaktioner:En uppsättning transaktioner som antingen lyckas eller dras tillbaka.
- 2,stabilitet:Det finns olaglig data (utländska nyckelbegränsningar och liknande), och transaktionen dras tillbaka.
- 3,Isolering:Transaktioner körs oberoende.Om resultatet av en transaktion påverkar andra transaktioner, kommer andra transaktioner att dras tillbaka.100% isolering av transaktioner på bekostnad av hastighet.
- 4,pålitlighet:Efter mjukvaru- och maskinvarukraschen kommer InnoDB-datatabelldrivrutinen att använda loggfilen för att rekonstruera och modifiera den.Tillförlitlighet och hög hastighet kan inte ha båda, alternativet innodb_flush_log_at_trx_commit avgör när transaktioner ska sparas i loggen.
Under standardinställningarna för MySQL-kommandoraden committeras transaktioner automatiskt, det vill säga COMMIT-operationen kommer att exekveras omedelbart efter att SQL-satsen exekveras.Därför, för att explicit öppna en transaktion måste du använda kommandot BEGIN eller START TRANSACTION, eller utföra kommandot SET AUTOCOMMIT=0, för att inaktivera användningen av automatisk commit för den aktuella sessionen.
Transaktionskontrollutlåtande:
- BÖRJA eller STARTA TRANSAKTION, starta en transaktion uttryckligen;
- COMMIT; COMMIT WORK kan också användas, men de två är likvärdiga. COMMIT begår transaktionen och gör alla ändringar som görs i databasen permanenta;
- ROLLBACK; det är möjligt att använda ROLLBACK WORK, men de två är likvärdiga.Återställning avslutar användarens transaktion och ångrar alla pågående oengagerade ändringar;
- SAVEPOINT identifierare: SAVEPOINT tillåter att skapa en räddningspunkt i en transaktion, och det kan finnas flera SAVEPOINTs i en transaktion;
- RELEASE SAVEPOINT-identifierare, radera en räddningspunkt för en transaktion, när det inte finns någon specificerad räddningspunkt kommer ett undantag att köras av uttalandet;
- ROLLBACK TO identifier, rulla tillbaka transaktionen till punkten;
- SET TRANSACTION; används för att ställa in isoleringsnivån för transaktionen. InnoDB-lagringsmotorn tillhandahåller transaktionsisoleringsnivåer av LÄS OFÅGA, LÄS KOMMITTERAD, REPETERBAR LÄS och SERIALISERBAR.
Det finns två huvudsakliga metoder för MYSQL transaktionsbearbetning:
1. Använd BEGIN, ROLLBACK, COMMIT för att uppnå
- BÖRJA starta en transaktion
- RULLA TILLBAKA återställning av transaktioner
- BEGÅ Transaktionsbekräftelse
2. Använd SET direkt för att ändra MySQL:s auto-commit-läge:
- SETAUTOCOMMIT=0 Inaktivera auto-commit
- SETAUTOCOMMIT=1 Aktivera auto-commit
transaktionstest
mysql> use chenweiliang; Database changed mysql> CREATE TABLE chenweiliang_transaction_test( id int(5)) engine=innodb; # 创建数据表 Query OK, 0 rows affected (0.04 sec) mysql> select * from chenweiliang_transaction_test; Empty set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test value(5); Query OK, 1 rows affected (0.01 sec) mysql> insert into chenweiliang_transaction_test value(6); Query OK, 1 rows affected (0.00 sec) mysql> commit; # 提交事务 Query OK, 0 rows affected (0.01 sec) mysql> select * from chenweiliang_transaction_test; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test values(7); Query OK, 1 rows affected (0.00 sec) mysql> rollback; # 回滚 Query OK, 0 rows affected (0.00 sec) mysql> select * from chenweiliang_transaction_test; # 因为回滚所以数据没有插入 +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql>
Använda transaktionsinstanser i PHP
MySQL ORDER BY test:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8"); mysqli_select_db( $conn, 'chenweiliang' ); mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行 mysqli_begin_transaction($conn); // 开始事务定义 if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(8)")) { mysqli_query($conn, "ROLLBACK"); // 判断当执行失败时回滚 } if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(9)")) { mysqli_query($conn, "ROLLBACK"); // 判断执行失败时回滚 } mysqli_commit($conn); //执行事务 mysqli_close($conn); ?>
Hope Chen Weiliang blogg ( https://www.chenweiliang.com/ ) delade "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", som är till hjälp för dig.
Välkommen att dela länken till denna artikel:https://www.chenweiliang.com/cwl-494.html
Välkommen till Telegram-kanalen på Chen Weiliangs blogg för att få de senaste uppdateringarna!
📚 Den här guiden innehåller ett enormt värde, 🌟Detta är ett sällsynt tillfälle, missa inte det! ⏰⌛💨
Dela och gilla om du vill!
Dina delning och likes är vår ständiga motivation!