បញ្ជីអត្ថបទ
មូលដ្ឋានទិន្នន័យ MySQLប្រតិបត្តិការ rollback ឯកោ/បើកគំនិត/ដំណើរការកម្រិតនៃសេចក្តីថ្លែងការណ៍ 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 ប៉ុន្តែពីរគឺសមមូល។Rollback បញ្ចប់ប្រតិបត្តិការរបស់អ្នកប្រើ ហើយមិនធ្វើរាល់ការកែប្រែដែលមិនមានការអនុញ្ញាតដែលកំពុងដំណើរការ។
- ការកំណត់អត្តសញ្ញាណ SAVEPOINT; SAVEPOINT អនុញ្ញាតឱ្យបង្កើតចំណុចរក្សាទុកនៅក្នុងប្រតិបត្តិការមួយ ហើយវាអាចមាន SAVEPOINT ច្រើននៅក្នុងប្រតិបត្តិការមួយ។
- បញ្ចេញកម្មវិធីកំណត់អត្តសញ្ញាណ SVEPOINT លុបចំណុចរក្សាទុកនៃប្រតិបត្តិការ នៅពេលដែលមិនមានចំណុចរក្សាទុកដែលបានបញ្ជាក់ ការប្រតិបត្តិសេចក្តីថ្លែងការណ៍នឹងបដិសេធការលើកលែង។
- ត្រឡប់ទៅអ្នកកំណត់អត្តសញ្ញាណ ត្រឡប់ប្រតិបត្តិការទៅចំណុច;
- SET TRANSACTION; ប្រើដើម្បីកំណត់កម្រិតឯកោនៃប្រតិបត្តិការ។ ម៉ាស៊ីនផ្ទុក InnoDB ផ្តល់នូវកម្រិតដាច់ពីគ្នានៃប្រតិបត្តិការនៃ READ UNCOMMITTED, READ COMMITTED, REPEATable REPEATable និង SERIALIZABLE ។
មានវិធីសាស្រ្តសំខាន់ពីរនៃដំណើរការប្រតិបត្តិការ MYSQL៖
1. ប្រើ BEGIN, ROLLBACK, COMMIT ដើម្បីសម្រេចបាន។
- ចាប់ផ្តើម ចាប់ផ្តើមប្រតិបត្តិការ
- វិលវិញ ប្រតិបត្តិការត្រឡប់មកវិញ
- ធ្វើសមាធិ ការបញ្ជាក់ប្រតិបត្តិការ
2. ប្រើ SET ដោយផ្ទាល់ដើម្បីផ្លាស់ប្តូររបៀប auto-commit របស់ 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>
ការប្រើប្រាស់ Transaction Instances ក្នុង 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/ ) បានចែករំលែក "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements" ដែលមានប្រយោជន៍សម្រាប់អ្នក។
សូមស្វាគមន៍ចំពោះការចែករំលែកតំណភ្ជាប់នៃអត្ថបទនេះ៖https://www.chenweiliang.com/cwl-494.html
សូមស្វាគមន៍មកកាន់ឆានែល Telegram នៃប្លុករបស់ Chen Weiliang ដើម្បីទទួលបានព័ត៌មានថ្មីៗចុងក្រោយបង្អស់!
📚 មគ្គុទ្ទេសក៍នេះមានតម្លៃមហាសាល 🌟នេះជាឱកាសដ៏កម្រ សូមកុំអូសរំលង! ⏰⌛💨
Share និង Like ប្រសិនបើអ្នកចូលចិត្ត!
ការចែករំលែក និងការចូលចិត្តរបស់អ្នកគឺជាការលើកទឹកចិត្តបន្តរបស់យើង!