Artikel Directory
MySQL-databaseTransactie terugdraaien isolatie/open concept/niveau verwerking php-statement
MySQL Zaken
MySQL-transacties worden voornamelijk gebruikt om gegevens te verwerken met een grote hoeveelheid bewerkingen en een hoge complexiteit.Als u bijvoorbeeld een persoon verwijdert in het personeelsbeheersysteem, moet u zowel de basisinformatie van de persoon als de informatie met betrekking tot de persoon verwijderen, zoals mailboxen, artikelen, enz. Op deze manier kunnen deze databasebewerkingen een transactie vormen!
- Transacties worden alleen ondersteund in MySQL voor databases of tabellen die de Innodb-database-engine gebruiken.
- Transactieverwerking kan worden gebruikt om de integriteit van de database te behouden en ervoor te zorgen dat batches SQL-instructies ofwel allemaal worden uitgevoerd of geen ervan worden uitgevoerd.
- Transacties worden gebruikt om invoeg-, update- en verwijderverklaringen te beheren
Over het algemeen moet een transactie voldoen aan 4 voorwaarden (ACID): Atomiciteit (atomiciteit), Consistentie (stabiliteit), Isolatie (isolatie), Duurzaamheid (betrouwbaarheid)
- 1,Atomaire transacties:Een reeks transacties, succesvol of ingetrokken.
- 2,stabiliteit:Er zijn illegale gegevens (buitenlandse sleutelbeperkingen en dergelijke) en de transactie wordt ingetrokken.
- 3,Isolatie:Transacties verlopen onafhankelijk.Als het resultaat van een transactie andere transacties beïnvloedt, worden andere transacties ingetrokken.100% isolatie van transacties, waarbij snelheid moet worden opgeofferd.
- 4,betrouwbaarheid:Na de software- en hardwarecrash zal het InnoDB-gegevenstabelstuurprogramma het logbestand gebruiken om het te reconstrueren en aan te passen.Betrouwbaarheid en hoge snelheid kunnen niet beide hebben, de innodb_flush_log_at_trx_commit optie bepaalt wanneer transacties in het logboek moeten worden opgeslagen.
Onder de standaardinstellingen van de MySQL-opdrachtregel worden transacties automatisch vastgelegd, dat wil zeggen dat de COMMIT-bewerking onmiddellijk wordt uitgevoerd nadat de SQL-instructie is uitgevoerd.Om een transactie expliciet te starten, moet u daarom de opdracht BEGIN of START TRANSACTIE gebruiken, of de opdracht SET AUTOCOMMIT=0 uitvoeren om het gebruik van automatische vastlegging voor de huidige sessie uit te schakelen.
Transactiecontroleverklaring:
- BEGIN of START TRANSACTIE; start expliciet een transactie;
- COMMIT; COMMIT WORK kan ook worden gebruikt, maar beide zijn equivalent. COMMIT voert de transactie uit en maakt alle wijzigingen aan de database permanent;
- ROLLBACK; het is mogelijk om ROLLBACK WORK te gebruiken, maar beide zijn equivalent.Rollback beëindigt de transactie van de gebruiker en maakt alle niet-vastgelegde wijzigingen ongedaan;
- SAVEPOINT identifier; SAVEPOINT maakt het mogelijk om een savepoint in een transactie te creëren, en er kunnen meerdere SAVEPOINTs in een transactie zijn;
- RELEASE SAVEPOINT identifier; verwijder een savepoint van een transactie, als er geen savepoint is, zal het uitvoeren van de instructie een uitzondering veroorzaken;
- ROLLBACK TO identifier, de transactie terugdraaien naar het punt;
- TRANSACTIE INSTELLEN; wordt gebruikt om het isolatieniveau van de transactie in te stellen. De transactie-isolatieniveaus die door de InnoDB-opslagengine worden geboden, zijn READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ en SERIALIZABLE.
Er zijn twee hoofdmethoden voor het verwerken van MYSQL-transacties:
1. Gebruik BEGIN, ROLLBACK, COMMIT om te bereiken:
- BEGINNEN een transactie starten
- TERUGROLLEN transactie terugdraaien
- COMMIT transactiebevestiging
2. Gebruik SET rechtstreeks om de auto-commit-modus van MySQL te wijzigen:
- AUTOCOMMIT INSTELLEN=0 Automatisch vastleggen uitschakelen
- AUTOCOMMIT INSTELLEN=1 Automatisch vastleggen inschakelen
transactietest
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>
Transactie-instanties gebruiken in 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); ?>
Hoop Chen Weiliang Blog ( https://www.chenweiliang.com/ ) gedeeld "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", wat nuttig voor u is.
Welkom om de link van dit artikel te delen:https://www.chenweiliang.com/cwl-494.html
Welkom op het Telegram-kanaal van Chen Weiliang's blog voor de laatste updates!
📚 Deze gids bevat enorme waarde, 🌟Dit is een zeldzame kans, mis hem niet! ⏰⌛💨
Deel en like als je wilt!
Uw delen en likes zijn onze voortdurende motivatie!