Artikkelkatalog
MySQL-databaseTransaksjon tilbakerulling isolasjon/åpent konsept/nivåbehandling php-setning
MySQL Saker
MySQL-transaksjoner brukes hovedsakelig til å behandle data med en stor mengde operasjoner og høy kompleksitet.For eksempel, i personalstyringssystemet, hvis du sletter en person, må du slette både den grunnleggende informasjonen om personen og informasjonen knyttet til personen, for eksempel postbokser, artikler osv. På denne måten vil disse databaseoperasjonserklæringene utgjør en transaksjon!
- Transaksjoner støttes i MySQL kun for databaser eller tabeller som bruker Innodb-databasemotoren.
- Transaksjonsbehandling kan brukes til å opprettholde integriteten til databasen, og sikre at batcher med SQL-setninger enten blir utført eller ingen av dem blir utført.
- Transaksjoner brukes til å administrere inn, oppdatere, slette uttalelser
Generelt sett må transaksjoner oppfylle 4 betingelser (ACID): Atomisitet (atomisitet), konsistens (stabilitet), isolasjon (isolasjon), holdbarhet (pålitelighet)
- 1,Atomiteten til transaksjoner:Et sett med transaksjoner som enten lykkes eller trekkes tilbake.
- 2,stabilitet:Det er ulovlige data (fremmednøkkelbegrensninger og lignende), og transaksjonen trekkes tilbake.
- 3,Isolering:Transaksjoner kjøres uavhengig.Hvis resultatet av en transaksjon påvirker andre transaksjoner, vil andre transaksjoner bli trukket tilbake.100 % isolasjon av transaksjoner på bekostning av hastighet.
- 4,pålitelighet:Etter programvare- og maskinvarekrasj vil InnoDB-datatabelldriveren bruke loggfilen til å rekonstruere og endre den.Pålitelighet og høy hastighet kan ikke ha begge deler, innodb_flush_log_at_trx_commit-alternativet bestemmer når transaksjoner skal lagres i loggen.
Under standardinnstillingene for MySQL-kommandolinjen, blir transaksjoner automatisk forpliktet, det vil si at COMMIT-operasjonen vil bli utført umiddelbart etter at SQL-setningen er utført.Derfor, for å eksplisitt åpne en transaksjon, må du bruke kommandoen BEGIN eller START TRANSACTION, eller utføre kommandoen SET AUTOCOMMIT=0, for å deaktivere bruken av automatisk commit for gjeldende økt.
Transaksjonskontrollerklæring:
- START eller START TRANSAKSJON; start eksplisitt en transaksjon;
- COMMIT; COMMIT WORK kan også brukes, men de to er likeverdige. COMMIT forplikter transaksjonen og gjør alle endringer i databasen permanente;
- ROLLBACK; det er mulig å bruke ROLLBACK WORK, men de to er likeverdige.Tilbakerulling avslutter brukerens transaksjon og angrer alle ikke-forpliktede endringer som pågår;
- SAVEPOINT identifikator: SAVEPOINT gjør det mulig å opprette et lagringspunkt i en transaksjon, og det kan være flere SAVEPOINTs i en transaksjon;
- RELEASE SAVEPOINT identifikator; slett et lagringspunkt for en transaksjon, når det ikke er noe spesifisert lagringspunkt, vil utføring av setningen gi et unntak;
- ROLLBACK TO identifier; rulle tilbake transaksjonen til poenget;
- SET TRANSACTION; brukes til å angi isolasjonsnivået for transaksjonen. Transaksjonsisolasjonsnivåene som tilbys av InnoDB-lagringsmotoren er READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, og SERIALIZABLE.
Det er to hovedmetoder for MYSQL-transaksjonsbehandling:
1. Bruk BEGIN, ROLLBACK, COMMIT for å oppnå
- BEGYNNE starte en transaksjon
- TILBAKE tilbakeføring av transaksjoner
- BEGÅ Transaksjonsbekreftelse
2. Bruk SET direkte for å endre MySQLs auto-commit-modus:
- SETAUTOCOMMIT=0 Deaktiver automatisk forpliktelse
- SETAUTOCOMMIT=1 Slå på automatisk forpliktelse
transaksjonstest
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>
Bruke transaksjonsforekomster 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/ ) delte "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", som er nyttig for deg.
Velkommen til å dele lenken til denne artikkelen:https://www.chenweiliang.com/cwl-494.html
Velkommen til Telegram-kanalen til Chen Weiliangs blogg for å få de siste oppdateringene!
📚 Denne guiden inneholder enorm verdi, 🌟Dette er en sjelden mulighet, ikke gå glipp av den! ⏰⌛💨
Del og lik om du vil!
Din deling og likes er vår kontinuerlige motivasjon!