Директорияи мақолаҳо
пойгоҳи додаҳои 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; COMMIT WORK низ метавонад истифода шавад, аммо ин ду баробаранд. COMMIT транзаксияро анҷом медиҳад ва ҳама тағиротҳоро ба пойгоҳи додаҳо доимӣ мекунад;
- ROLLBACK; имкони истифодабарии ROLLBACK WORK аст, аммо ин ду баробаранд.Бозгашт ба муомилоти корбар хотима медиҳад ва ҳама тағиротҳои иҷронашударо бекор мекунад;
- Идентификатори SAVEPOINT; SAVEPOINT имкон медиҳад, ки дар транзаксия нуқтаи нигоҳдорӣ эҷод карда шавад ва дар транзаксия метавонад якчанд SAVEPOINT мавҷуд бошад;
- Идентификатори RELEASE SAVEPOINT; нест кардани нуқтаи нигоҳдории транзаксия, вақте ки ягон нуқтаи нигоҳдории муайян мавҷуд нест, иҷрои изҳорот истисноро ба вуҷуд меорад;
- БОЗГАРДОН БА идентификатор; баргардонидани транзаксия ба нуқта;
- SET TRANSACTION; барои муқаррар кардани сатҳи ҷудошавии транзаксия истифода мешавад. Муҳаррики нигаҳдории InnoDB сатҳҳои изолятсияи транзаксияҳои READ UNCOMMITTED, READ COMMITTED, ТАКРОР ХОНАНДА ва SERIALIZABLE-ро таъмин мекунад.
Ду усули асосии коркарди транзаксияҳои MYSQL вуҷуд доранд:
1. Барои ноил шудан ба ОГОИШ, БАРГАШТ, КОММИТ истифода баред
- БЕГОНА транзаксияро оғоз кунед
- РОЛЛБЕК бозгашти транзаксия
- УҲДАДОРИ Тасдиқи транзаксия
2. Барои тағир додани режими худкори MySQL мустақиман SET-ро истифода баред:
- АВТОКОМИТЕТИ = 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
Тартиби 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 Blog ( https://www.chenweiliang.com/ ) мубодилаи "Мубодилаи Бозгашти Database Database MySQL / Concept Open / Коркарди сатҳи изҳороти PHP", ки барои шумо муфид аст.
Хуш омадед ба мубодилаи истиноди ин мақола:https://www.chenweiliang.com/cwl-494.html
Хуш омадед ба канали Telegram блоги Чен Вейлян барои гирифтани навсозиҳои охирин!
📚 Ин дастур дорои арзиши бузург аст, 🌟Ин як имконияти нодир аст, онро аз даст надиҳед! ⏰⌛💨
Агар ба шумо маъқул бошад, мубодила кунед ва лайк монед!
Мубодилаи шумо ва лайкҳои шумо ангезаи доимии мост!