ລາຍການຫົວເລື່ອງ
ຖານຂໍ້ມູນ MySQLການເຮັດທຸລະກໍາ rollback isolation/open concept/level processing php statement
MySQL ວຽກງານ
ການເຮັດທຸລະກໍາ MySQL ສ່ວນໃຫຍ່ແມ່ນໃຊ້ເພື່ອປະມວນຜົນຂໍ້ມູນທີ່ມີຈໍານວນການດໍາເນີນງານຫຼາຍແລະຄວາມສັບສົນສູງ.ສໍາລັບຕົວຢ່າງ, ໃນລະບົບການຄຸ້ມຄອງບຸກຄະລາກອນ, ຖ້າຫາກວ່າທ່ານລຶບບຸກຄົນໃດຫນຶ່ງ, ທ່ານຈໍາເປັນຕ້ອງໄດ້ລົບທັງຂໍ້ມູນພື້ນຖານຂອງບຸກຄົນແລະຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບບຸກຄົນ, ເຊັ່ນ: ກ່ອງຈົດຫມາຍ, ບົດຄວາມ, ແລະອື່ນໆ, ໃນວິທີການເຫຼົ່ານີ້, ຖະແຫຼງການການດໍາເນີນງານຖານຂໍ້ມູນ. ປະກອບເປັນທຸລະກໍາ!
- ການເຮັດທຸລະກໍາໄດ້ຮັບການສະຫນັບສະຫນູນໃນ MySQL ພຽງແຕ່ສໍາລັບຖານຂໍ້ມູນຫຼືຕາຕະລາງທີ່ໃຊ້ເຄື່ອງຈັກຖານຂໍ້ມູນ Innodb.
- ການປະມວນຜົນທຸລະກໍາສາມາດຖືກນໍາໃຊ້ເພື່ອຮັກສາຄວາມສົມບູນຂອງຖານຂໍ້ມູນ, ຮັບປະກັນວ່າ batches ຂອງ SQL statements ຈະຖືກປະຕິບັດທັງຫມົດຫຼືບໍ່ມີອັນໃດຖືກປະຕິບັດ.
- ທຸລະກໍາຖືກນໍາໃຊ້ເພື່ອຈັດການໃສ່, ປັບປຸງ, ລຶບໃບແຈ້ງຍອດ
ໂດຍທົ່ວໄປແລ້ວ, ການເຮັດທຸລະກໍາຕ້ອງຕອບສະຫນອງ 4 ເງື່ອນໄຂ (ACID): ປະລໍາມະນູ (ປະລໍາມະນູ), ຄວາມສອດຄ່ອງ (ຄວາມຫມັ້ນຄົງ), ການໂດດດ່ຽວ (ການໂດດດ່ຽວ), ຄວາມທົນທານ (ຄວາມຫນ້າເຊື່ອຖື)
- ...ປະລໍາມະນູຂອງທຸລະກໍາ:ຊຸດຂອງທຸລະກໍາທີ່ປະສົບຜົນສໍາເລັດຫຼືຖອນອອກ.
- ...ຄວາມໝັ້ນຄົງ:ມີຂໍ້ມູນທີ່ຜິດກົດຫມາຍ (ຂໍ້ຈໍາກັດທີ່ສໍາຄັນຂອງຕ່າງປະເທດແລະອື່ນໆ), ແລະການເຮັດທຸລະກໍາຖືກຖອນອອກ.
- ...ການແຍກດ່ຽວ:ທຸລະກໍາດໍາເນີນການເປັນເອກະລາດ.ຖ້າຜົນຂອງການເຮັດທຸລະກໍາມີຜົນກະທົບຕໍ່ການເຮັດທຸລະກໍາອື່ນໆ, ການເຮັດທຸລະກໍາອື່ນໆຈະຖືກຖອນ.100% ການໂດດດ່ຽວການເຮັດທຸລະກໍາໃນຄ່າໃຊ້ຈ່າຍຂອງຄວາມໄວ.
- ...ຄວາມຫນ້າເຊື່ອຖື:ຫຼັງຈາກການຂັດຂ້ອງຂອງຊອບແວແລະຮາດແວ, ໄດເວີຕາຕະລາງຂໍ້ມູນ InnoDB ຈະນໍາໃຊ້ໄຟລ໌ບັນທຶກເພື່ອສ້າງໃຫມ່ແລະປັບປຸງແກ້ໄຂມັນ.ຄວາມຫນ້າເຊື່ອຖືແລະຄວາມໄວສູງບໍ່ສາມາດມີທັງສອງ, ທາງເລືອກ innodb_flush_log_at_trx_commit ກໍານົດເວລາທີ່ຈະບັນທຶກການເຮັດທຸລະກໍາໃນບັນທຶກ.
ພາຍໃຕ້ການຕັ້ງຄ່າເລີ່ມຕົ້ນຂອງເສັ້ນຄໍາສັ່ງ MySQL, ການເຮັດທຸລະກໍາແມ່ນອັດຕະໂນມັດ, ນັ້ນແມ່ນ, ການດໍາເນີນງານ COMMIT ຈະຖືກປະຕິບັດທັນທີຫຼັງຈາກຄໍາສັ່ງ SQL ຖືກປະຕິບັດ.ດັ່ງນັ້ນ, ເພື່ອເປີດທຸລະກໍາຢ່າງຈະແຈ້ງຈະຕ້ອງໃຊ້ຄໍາສັ່ງ BEGIN ຫຼື START TRANSACTION, ຫຼືປະຕິບັດຄໍາສັ່ງ SET AUTOCOMMIT=0, ເພື່ອປິດການໃຊ້ງານຂອງ commit ອັດຕະໂນມັດສໍາລັບ session ໃນປັດຈຸບັນ.
ໃບແຈ້ງຍອດການຄວບຄຸມທຸລະກໍາ:
- BEGIN ຫຼືເລີ່ມຕົ້ນທຸລະກໍາ; ເລີ່ມການເຮັດທຸລະກໍາຢ່າງຊັດເຈນ;
- COMMIT; COMMIT WORK ຍັງສາມາດຖືກນໍາໃຊ້, ແຕ່ທັງສອງແມ່ນທຽບເທົ່າ. COMMIT ຫມັ້ນສັນຍາການເຮັດທຸລະກໍາແລະເຮັດໃຫ້ການດັດແກ້ທັງຫມົດທີ່ເຮັດກັບຖານຂໍ້ມູນຖາວອນ;
- ROLLBACK; ມັນເປັນໄປໄດ້ທີ່ຈະໃຊ້ ROLLBACK WORK, ແຕ່ທັງສອງແມ່ນທຽບເທົ່າ.Rollback ສິ້ນສຸດການເຮັດທຸລະກໍາຂອງຜູ້ໃຊ້ແລະຍົກເລີກການດັດແກ້ທີ່ບໍ່ໄດ້ຕົກລົງທັງຫມົດທີ່ກໍາລັງດໍາເນີນຢູ່;
- ຕົວລະບຸ SVEPOINT; SavePOINT ອະນຸຍາດໃຫ້ສ້າງຈຸດບັນທຶກໃນການເຮັດທຸລະກໍາ, ແລະສາມາດມີຫຼາຍ SAVEPOINT ໃນທຸລະກໍາ;
- ປ່ອຍຕົວລະບຸ SVEPOINT; ລຶບຈຸດບັນທຶກຂອງທຸລະກໍາ, ເມື່ອບໍ່ມີຈຸດບັນທຶກທີ່ລະບຸ, ການປະຕິບັດຄໍາສັ່ງຈະຖິ້ມຂໍ້ຍົກເວັ້ນ;
- ROLLBACK TO ຕົວລະບຸ; ມ້ວນຄືນການເຮັດທຸລະກໍາໄປຫາຈຸດ;
- SET TRANSACTION; ໃຊ້ເພື່ອກໍານົດລະດັບການໂດດດ່ຽວຂອງທຸລະກໍາ. ລະດັບການໂດດດ່ຽວການເຮັດທຸລະກໍາທີ່ສະຫນອງໂດຍເຄື່ອງຈັກການເກັບຮັກສາ InnoDB ແມ່ນ READ Uncommitted, READ COMMITTED, REPEATable READ, ແລະ SERIALIZABLE.
ມີສອງວິທີການຕົ້ນຕໍຂອງການປະມວນຜົນທຸລະກໍາ MYSQL:
1. ໃຊ້ BEGIN, ROLLBACK, COMMIT ເພື່ອບັນລຸ
- ເລີ່ມຕົ້ນ ເລີ່ມທຸລະກໍາ
- ມ້ວນຄືນ ການໂອນເງິນຄືນ
- ຄະນະ ກຳ ມະການ ການຢືນຢັນການເຮັດທຸລະກໍາ
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 ORDER ໂດຍການທົດສອບ:
<? 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); ?>
ຫວັງ 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 and like ຖ້າມັກ!
ການແບ່ງປັນແລະການຖືກໃຈຂອງທ່ານແມ່ນການຊຸກຍູ້ຢ່າງຕໍ່ເນື່ອງຂອງພວກເຮົາ!