Директориум за статии
MySQL база на податоциИзјава за php за враќање на трансакцијата/отворен концепт/обработка на ниво
MySQL, Работи
MySQL трансакциите главно се користат за обработка на податоци со голема количина на операции и висока сложеност.На пример, во системот за управување со персоналот, ако избришете лице, треба да ги избришете и основните информации на лицето и информациите поврзани со лицето, како што се поштенски сандачиња, написи итн. На овој начин, овие изјави за работа на базата претставуваат трансакција!
- Трансакциите се поддржани во MySQL само за бази на податоци или табели кои го користат моторот за база на податоци Innodb.
- Обработката на трансакциите може да се користи за одржување на интегритетот на базата на податоци, осигурувајќи дека сериите на SQL изјави се или сите извршени или ниту еден од нив не е извршен.
- Трансакциите се користат за управување со вметнување, ажурирање, бришење изјави
Општо земено, трансакцијата мора да исполнува 4 услови (ACID): Атомичност (атомичноста), Конзистентност (стабилност), Изолација (изолација), Трајност (доверливост)
- 1,Атомичноста на трансакциите:Збир на трансакции, успешни или повлечени.
- 2,стабилност:Има нелегални податоци (странски клучни ограничувања и слично), а трансакцијата е повлечена.
- 3,Изолација:Трансакциите се одвиваат независно.Ако резултатот од трансакцијата влијае на други трансакции, тогаш другите трансакции ќе бидат повлечени.100% изолација на трансакциите, што бара жртвување на брзината.
- 4,доверливост:По падот на софтверот и хардверот, двигателот на табелата со податоци на InnoDB ќе ја користи датотеката за евиденција за да ја реконструира и измени.Сигурноста и големата брзина не можат да ги имаат и двете, опцијата innodb_flush_log_at_trx_commit одредува кога да се зачуваат трансакциите во дневникот.
Според стандардните поставки на командната линија MySQL, трансакциите автоматски се извршуваат, односно операцијата COMMIT ќе се изврши веднаш откако ќе се изврши изјавата SQL.Затоа, за експлицитно да се отвори трансакција мора да се користи командата BEGIN или START TRANSACTION, или да се изврши командата SET AUTOCOMMIT=0, за да се оневозможи употребата на автоматско извршување за тековната сесија.
Изјава за контрола на трансакцијата:
- ЗАПОЧНЕТЕ или ЗАПОЧНЕТЕ СО ТРАНСАКЦИЈА; експлицитно започнете трансакција;
- Може да се користи и COMMIT WORK, но двете се еквивалентни. COMMIT ја обврзува трансакцијата и ги прави трајни сите модификации направени во базата на податоци;
- ВРАЌАЊЕ; можно е да се користи ВРАЌАЊЕ РАБОТА, но двете се еквивалентни.Враќањето ја завршува трансакцијата на корисникот и ги поништува сите необврзани модификации во тек;
- SAVEPOINT идентификатор SAVEPOINT овозможува да се креира зачувана точка во трансакција и може да има повеќе SAVEPOINT во една трансакција;
- ОСЛОБОДЕТЕ го идентификаторот SAVEPOINT, избришете ја зачуваната точка на трансакцијата, кога нема одредена точка за зачувување, извршувањето на изјавата ќе направи исклучок;
- ВРАЌАЊЕ ВО идентификаторот, вратете ја трансакцијата до точката;
- SET TRANSACTION; се користи за поставување на нивото на изолација на трансакцијата. Моторот за складирање InnoDB обезбедува нивоа на изолација на трансакциите на READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ и SERIALIZABLE.
Постојат два главни методи за обработка на трансакциите MYSQL:
1. Користете BEGIN, ROLLBACK, COMMIT за да постигнете
- ПОЧНЕТЕ започнете трансакција
- ВРАOLАЕ враќање на трансакцијата
- КОМИТИРАЈТЕ Потврда за трансакција
2. Користете SET директно за да го промените режимот за автоматско извршување на MySQL:
- ПОСТАВЕТЕ AUTOCOMMIT=0 Оневозможи автоматско извршување
- ПОСТАВЕТЕ AUTOCOMMIT=1 Вклучете автоматско извршување
тест за трансакција
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>
Користење на примери на трансакции во PHP
MySQL ПОРАЧНИК ПО тест:
<? 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 ( https://www.chenweiliang.com/ ) сподели „Изолација на враќање на трансакциите на базата на податоци на MySQL/Отворен концепт/обработка на нивоа на изјави на PHP“, што е корисно за вас.
Добредојдовте да ја споделите врската од оваа статија:https://www.chenweiliang.com/cwl-494.html
Добредојдовте на Телеграмскиот канал на блогот на Чен Веилијанг за да ги добиете најновите ажурирања!
📚 Овој водич содржи огромна вредност, 🌟Ова е ретка можност, не ја пропуштајте! ⏰⌛💨
Споделете и лајкнете ако ви се допаѓа!
Вашето споделување и лајкови се наша континуирана мотивација!