Артицле Дирецтори
МиСКЛ база податакапхп исказ изолације/отвореног концепта/обраде на нивоу трансакције
МиСКЛ Послови
МиСКЛ трансакције се углавном користе за обраду података са великом количином операција и високом сложеношћу.На пример, у систему управљања кадровима, ако избришете особу, потребно је да избришете и основне податке о особи и информације које се односе на особу, као што су поштански сандучићи, чланци итд. На тај начин, ове изјаве о раду базе података представљају трансакцију!
- Трансакције су подржане у МиСКЛ-у само за базе података или табеле које користе Иннодб механизам базе података.
- Обрада трансакција се може користити за одржавање интегритета базе података, обезбеђујући да се пакети СКЛ исказа или изврше сви или да се ниједан од њих не изврши.
- Трансакције се користе за управљање изјавама за уметање, ажурирање, брисање
Уопштено говорећи, трансакција мора да испуњава 4 услова (АЦИД): Атомичност (атомичност), Конзистентност (стабилност), Изолација (изолација), Трајност (поузданост)
- КСНУМКС,Атомичност трансакција:Скуп трансакција које успевају или се повлаче.
- КСНУМКС,стабилност:Постоје незаконити подаци (ограничења страног кључа и слично), а трансакција се повлачи.
- КСНУМКС,Изолација:Трансакције се одвијају независно.Ако резултат трансакције утиче на друге трансакције, онда ће друге трансакције бити повучене.100% изолација трансакција на рачун брзине.
- КСНУМКС,поузданост:Након пада софтвера и хардвера, управљачки програм табеле података ИнноДБ ће користити датотеку евиденције да би је реконструисао и модификовао.Поузданост и велика брзина не могу имати обоје, опција иннодб_флусх_лог_ат_трк_цоммит одређује када треба сачувати трансакције у дневнику.
Под подразумеваним поставкама командне линије МиСКЛ, трансакције се аутоматски урезују, то јест, операција ЦОММИТ ће бити извршена одмах након што се изврши СКЛ наредба.Стога, да бисте експлицитно отворили трансакцију, морате користити команду БЕГИН или СТАРТ ТРАНСАЦТИОН, или извршити команду СЕТ АУТОЦОММИТ=0, да бисте онемогућили коришћење аутоматског урезивања за тренутну сесију.
Изјава о контроли трансакције:
- ЗАПОЧНИ или ПОЧНИ ТРАНСАКЦИЈУ; експлицитно започети трансакцију;
- ЦОММИТ; ЦОММИТ ВОРК се такође може користити, али ова два су еквивалентна. ЦОММИТ урезује трансакцију и чини све модификације направљене у бази података трајним;
- РОЛЛБАЦК; могуће је користити РОЛЛБАЦК ВОРК, али су та два еквивалентна.Враћање завршава трансакцију корисника и поништава све необјављене модификације у току;
- САВЕПОИНТ идентификатор; САВЕПОИНТ омогућава креирање тачке чувања у трансакцији, а може бити више САВЕПОИНТ у трансакцији;
- РЕЛЕАСЕ САВЕПОИНТ идентификатор; избришите тачку чувања трансакције, када не постоји наведена тачка чувања, извршавање наредбе ће изазвати изузетак;
- РОЛЛБАЦК ТО идентификатор; вратите трансакцију до тачке;
- СЕТ ТРАНСАЦТИОН; користи се за постављање нивоа изолације трансакције. ИнноДБ механизам за складиштење обезбеђује нивое изолације трансакција РЕАД УНЦОММИТТЕД, РЕАД ЦОММИТТЕД, РЕПЕАТАБЛЕ РЕАД и СЕРИАЛИЗАБЛЕ.
Постоје две главне методе обраде МИСКЛ трансакција:
1. Користите БЕГИН, РОЛЛБАЦК, ЦОММИТ да бисте постигли
- БЕГИН започети трансакцију
- РОЛБАЦК враћање трансакције
- УРАДИТИ Потврда трансакције
2. Користите СЕТ директно да промените МиСКЛ режим аутоматског урезивања:
- СЕТ АУТОЦОММИТ=0 Онемогућите аутоматско урезивање
- СЕТ АУТОЦОММИТ=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 $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); ?>
Блог Хопе Цхен Веилианг ( https://www.chenweiliang.com/ ) је поделио „Изолација поврата трансакције МиСКЛ базе података/Отворени концепт/Обрада на нивоу ПХП изјава“, што вам је од помоћи.
Добродошли да поделите везу овог чланка:https://www.chenweiliang.com/cwl-494.html
Добродошли на Телеграм канал блога Цхен Веилианг-а да бисте добили најновија ажурирања!
📚 Овај водич садржи огромну вредност, 🌟Ово је ретка прилика, не пропустите је! ⏰⌛💨
Поделите и лајкујте ако желите!
Ваше дељење и лајкови су наша стална мотивација!