Artikel Directory
MySQL databankTransaksje rollback isolaasje / iepen konsept / nivo ferwurkjen php statement
MySQL Saken
MySQL-transaksjes wurde benammen brûkt om gegevens te ferwurkjen mei in grut oantal operaasjes en hege kompleksiteit.Bygelyks, yn it personielbehearsysteem, as jo in persoan wiskje, moatte jo sawol de basisynformaasje fan 'e persoan en de ynformaasje yn ferbân mei de persoan wiskje, lykas brievebussen, artikels, ensfh. Op dizze manier wurde dizze databankoperaasjeferklearrings foarmje in transaksje!
- Transaksjes wurde yn MySQL allinich stipe foar databases of tabellen dy't de Innodb-databasemotor brûke.
- Transaksjeferwurking kin brûkt wurde om de yntegriteit fan 'e databank te behâlden, te garandearjen dat batches fan SQL-útspraken of allegear wurde útfierd of net ien fan har wurdt útfierd.
- Transaksjes wurde brûkt foar it behearen fan ynfoegje, bywurkje, wiskje útspraken
Yn 't algemien moatte transaksjes foldogge oan 4 betingsten (ACID): Atomiciteit (atomisiteit), Konsistinsje (stabiliteit), Isolaasje (isolaasje), Duorsumens (betrouberens)
- 1 、Atomiteit fan transaksjes:In set fan transaksjes, itsij suksesfol as ynlutsen.
- 2 、stabiliteit:Der binne yllegale gegevens (bûtenlânske kaai beheiningen en sa), en de transaksje wurdt ynlutsen.
- 3 、Isolaasje:Transaksjes rinne ûnôfhinklik.As it resultaat fan in transaksje ynfloed hat op oare transaksjes, dan wurde oare transaksjes ynlutsen.100% isolaasje fan transaksjes op kosten fan snelheid.
- 4 、betrouberens:Nei de software- en hardwarecrash sil de InnoDB-gegevenstabelbestjoerder it logbestân brûke om it te rekonstruearjen en te feroarjen.Betrouberens en hege snelheid kinne net beide hawwe, de innodb_flush_log_at_trx_commit-opsje bepaalt wannear't transaksjes wurde opslein yn it log.
Under de standertynstellingen fan 'e MySQL kommandorigel wurde transaksjes automatysk ynset, dat is, de COMMIT-operaasje sil fuortdaliks wurde útfierd nei't de SQL-statement is útfierd.Dêrom, om eksplisyt in transaksje te iepenjen moat it kommando BEGIN of START TRANSACTION brûke, of it kommando SET AUTOCOMMIT=0 útfiere, om it gebrûk fan automatyske commit foar de aktuele sesje út te skeakeljen.
Ferklearring fan transaksjekontrôle:
- BEGIN of START TRANSAKJE; begjinne eksplisyt in transaksje;
- COMMIT; COMMIT WORK kin ek brûkt wurde, mar de twa binne lykweardich. COMMIT commits de transaksje en makket alle wizigingen makke oan de databank permanint;
- ROLLBACK; it is mooglik ROLLBACK WORK te brûken, mar de twa binne lykweardich.It weromdraaien einiget de transaksje fan 'e brûker en makket alle ûnbeheinde wizigingen dy't oan it wurk binne ûngedien;
- SAVEPOINT identifier; SAVEPOINT makket it mooglik om in savepoint yn in transaksje te meitsjen, en d'r kinne meardere SAVEPOINTs yn in transaksje wêze;
- RELEASE SAVEPOINT identifier; wiskje in opslachpunt fan in transaksje, as d'r gjin spesifisearre opslachpunt is, sil it útfieren fan de ferklearring in útsûndering smyt;
- ROLLBACK TO identifier; rôlje de transaksje werom nei it punt;
- SET TRANSACTION; brûkt om it isolaasjenivo fan 'e transaksje yn te stellen. De InnoDB-opslachmotor leveret transaksje-isolaasjenivo's fan READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, en SERIALIZABLE.
D'r binne twa haadmetoaden foar MYSQL-transaksjeferwurking:
1. Brûk BEGIN, ROLLBACK, COMMIT om te berikken
- BEGJINNE begjinne in transaksje
- ROLLE TERUG transaksje rollback
- BEDRIUWE Transaksje befêstiging
2. Brûk SET direkt om MySQL's auto-commit-modus te feroarjen:
- SETAUTOCOMMIT=0 Auto-commit útskeakelje
- SETAUTOCOMMIT=1 Auto-commit ynskeakelje
transaksje test
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>
Transaksje-ynstânsjes brûke yn 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 Blog ( https://www.chenweiliang.com/ ) dielde "MySQL Database Transaction Rollback Isolation / Iepen konsept / Level Processing of PHP Statements", dat is nuttich foar jo.
Wolkom om de keppeling fan dit artikel te dielen:https://www.chenweiliang.com/cwl-494.html
Wolkom by it Telegram-kanaal fan Chen Weiliang's blog om de lêste updates te krijen!
📚 Dizze hantlieding befettet enoarme wearde, 🌟Dit is in seldsume kâns, mis it net! ⏰⌛💨
Diel en like as jo wolle!
Jo dielen en likes binne ús trochgeande motivaasje!