Article Directory
MySQL маалымат базасыТранзакцияны артка кайтаруу изоляциясы/ачык концепция/деңгээлди иштетүү PHP билдирүүсү
MySQL Иштер
MySQL транзакциялары негизинен чоң көлөмдөгү операциялар жана жогорку татаалдыктагы маалыматтарды иштетүү үчүн колдонулат.Мисалы, персоналды башкаруу системасында, эгерде сиз адамды жок кылсаңыз, анда сиз адамдын негизги маалыматын да, почта ящиктери, макалалар ж. транзакцияны түзөт!
- MySQLде транзакциялар Innodb маалымат базасы кыймылдаткычын колдонгон маалымат базалары же таблицалар үчүн гана колдоого алынат.
- Транзакцияларды иштетүүнү SQL операторлорунун партияларынын бардыгы аткарылышын же алардын бири да аткарылбагандыгын камсыз кылуу үчүн, маалымат базасынын бүтүндүгүн сактоо үчүн колдонсо болот.
- Транзакциялар киргизүү, жаңыртуу, жок кылуу билдирүүлөрүн башкаруу үчүн колдонулат
Жалпысынан алганда, транзакция 4 шартка жооп бериши керек (ACID): Атомдук (атомдуулук), Консистенция (туруктуулук), Изоляция (обочолонуу), Узактыгы (ишенимдүүлүк)
- 1,Бүтүмдөрдүн атомдуулугу:Ийгиликке жетүү мүмкүн болгон транзакциялардын жыйындысы.
- 2,туруктуулук:Мыйзамсыз маалыматтар бар (чет элдик ачкыч чектөөлөр жана ушул сыяктуу), жана бүтүм алынып салынат.
- 3,Изоляция:Транзакциялар өз алдынча жүргүзүлөт.Эгерде транзакциянын натыйжасы башка транзакцияларга таасирин тийгизсе, анда башка транзакциялар жокко чыгарылат.100% транзакцияларды изоляциялоо, бул ылдамдыкты талап кылат.
- 4,ишенимдүүлүк:Программалык камсыздоо жана аппараттык камсыздоо бузулгандан кийин, InnoDB маалымат жадыбалынын драйвери аны реконструкциялоо жана өзгөртүү үчүн журнал файлын колдонот.Ишенимдүүлүк жана жогорку ылдамдык экөө тең болушу мүмкүн эмес, innodb_flush_log_at_trx_commit опциясы транзакцияларды журналга качан сактоону аныктайт.
MySQL буйрук сабынын демейки жөндөөлөрү боюнча транзакциялар автоматтык түрдө аткарылат, башкача айтканда, COMMIT операциясы SQL оператору аткарылгандан кийин дароо аткарылат.Ошондуктан, транзакцияны ачык баштоо үчүн, сиз БАШТАЛУУ же БАШТАЛУУ буйругун колдонушуңуз керек же учурдагы сессия үчүн автоматтык милдеттенмени колдонууну өчүрүү үчүн SET AUTOCOMMIT=0 буйругун аткарышыңыз керек.
Транзакцияны көзөмөлдөө билдирүүсү:
- БАШТАЛУУ же БАШТАЛУУ; транзакцияны ачык баштоо;
- COMMIT; COMMIT WORK да колдонулушу мүмкүн, бирок экөө тең. COMMIT транзакцияны ишке ашырат жана маалымат базасына киргизилген бардык өзгөртүүлөрдү туруктуу кылат;
- ROLLBACK; ROLLACK WORK колдонсо болот, бирок экөө тең бирдей.Артка кайтаруу колдонуучунун транзакциясын аяктайт жана аткарылып жаткан бардык бекитилбеген өзгөртүүлөрдү жокко чыгарат;
- SAVEPOINT идентификатору; SAVEPOINT транзакцияда сактоо пунктун түзүүгө мүмкүндүк берет жана транзакцияда бир нече SAVEPOINT болушу мүмкүн;
- RELEASE SAVEPOINT идентификатору; транзакциянын сактоо чекитин жок кылуу, эгерде көрсөтүлгөн сактоо чекити жок болсо, билдирүүнү аткаруу өзгөчө кырдаалды жаратат;
- ROLLBACK TO идентификатор; транзакцияны пунктка артка жылдыруу;
- SET TRANSACTION; транзакциянын изоляция деңгээлин коюу үчүн колдонулат. InnoDB сактагыч кыймылдаткычы тарабынан берилген транзакциянын изоляциясынын деңгээли READ COMMITTED, READ COMMITTED, КАЙТАЛАБАЙ ОКУУ жана СЕРИЯЛАШТЫРАТ.
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 блогу ( https://www.chenweiliang.com/ ) сиз үчүн пайдалуу болгон "MySQL Берилиштер базасынын транзакциясынын кайра обочолонуусу/Ачык концепциясы/РНР билдирүүлөрүнүн деңгээлинде иштетилиши" менен бөлүштү.
Бул макаланын шилтемесин бөлүшүүгө кош келиңиз:https://www.chenweiliang.com/cwl-494.html
Акыркы жаңылыктарды алуу үчүн Чен Вейляндын блогунун Telegram каналына кош келиңиз!
📚 Бул колдонмо чоң баалуулуктарды камтыйт, 🌟Бул сейрек кездешүүчү мүмкүнчүлүк, аны өткөрүп жибербеңиз! ⏰⌛💨
Бөлүшүп, жакса лайк!
Сиздин бөлүшүүңүз жана лайктарыңыз биздин үзгүлтүксүз мотивациябыз!