Нийтлэлийн лавлах
MySQL мэдээллийн санГүйлгээг буцаах тусгаарлалт/нээлттэй ойлголт/түвшин боловсруулах php мэдэгдэл
MySQL Ажил хэрэг
MySQL гүйлгээг ихэвчлэн их хэмжээний ажиллагаатай, нарийн төвөгтэй өгөгдөл боловсруулахад ашигладаг.Тухайлбал, боловсон хүчний удирдлагын системд тухайн хүнийг устгасан тохиолдолд тухайн хүний үндсэн мэдээлэл болон тухайн хүнтэй холбоотой шуудангийн хайрцаг, нийтлэл гэх мэт мэдээллийг хоёуланг нь устгах хэрэгтэй.Ийм байдлаар эдгээр мэдээллийн сангийн үйл ажиллагааны мэдэгдлүүд гүйлгээ хийх!
- Гүйлгээг MySQL-д зөвхөн Innodb мэдээллийн баазын системийг ашигладаг мэдээллийн сан эсвэл хүснэгтэд дэмждэг.
- Гүйлгээний боловсруулалтыг мэдээллийн сангийн бүрэн бүтэн байдлыг хангахын тулд ашиглаж, SQL мэдэгдлийн багцуудыг бүгдийг нь гүйцэтгэсэн эсвэл аль нь ч гүйцэтгэгдэхгүй байхыг баталгаажуулах боломжтой.
- Гүйлгээ нь оруулах, шинэчлэх, устгах мэдэгдлийг удирдахад ашиглагддаг
Ерөнхийдөө хэлцэл нь 4 нөхцөлийг хангасан байх ёстой (ACID): Атом чанар (атом чанар), Тогтвортой байдал (тогтвортой байдал), Тусгаарлах (тусгаарлах), Бат бөх чанар (найдвартай байдал)
- 1,Гүйлгээний атом шинж чанар:Амжилттай эсвэл буцаах гүйлгээний багц.
- 2,тогтвортой байдал:Хууль бус өгөгдөл (гадаадын түлхүүрийн хязгаарлалт гэх мэт) байгаа бөгөөд гүйлгээг цуцалсан.
- 3,Тусгаарлалт:Гүйлгээ нь бие даасан байдлаар явагддаг.Хэрэв гүйлгээний үр дүн бусад гүйлгээнд нөлөөлж байвал бусад гүйлгээг буцаан авна.Хурдны зардлаар гүйлгээг 100% тусгаарлах.
- 4,найдвартай байдал:Програм хангамж, техник хангамжийн эвдрэлийн дараа InnoDB өгөгдлийн хүснэгтийн драйвер нь лог файлыг сэргээн засварлах, өөрчлөхөд ашиглах болно.Найдвартай байдал, өндөр хурд нь хоёулаа байж болохгүй, innodb_flush_log_at_trx_commit сонголт нь гүйлгээг хэзээ бүртгэлд хадгалахыг тодорхойлдог.
MySQL командын мөрийн анхдагч тохиргоонуудын дагуу гүйлгээ автоматаар хийгддэг, өөрөөр хэлбэл SQL мэдэгдлийг гүйцэтгэсний дараа COMMIT үйлдлийг шууд гүйцэтгэх болно.Тиймээс гүйлгээг тодорхой нээхийн тулд EGIN эсвэл START TRANSACTION командыг ашиглах, эсвэл SET AUTOCOMMIT=0 командыг гүйцэтгэх ёстой бөгөөд одоогийн сессийн автомат амлалтыг идэвхгүй болгоно.
Гүйлгээний хяналтын мэдэгдэл:
- ГҮЙЛГЭЭГ ЭХЛҮҮЛЭХ эсвэл ЭХЛЭХ; гүйлгээг тодорхой эхлүүлэх;
- COMMIT; COMMITE WORK-г бас ашиглаж болно, гэхдээ энэ хоёр нь тэнцүү байна. COMMIT нь гүйлгээг хийж, мэдээллийн санд хийсэн бүх өөрчлөлтийг байнгын болгодог;
- ROLLBACK; ROLLBACK WORK-ийг ашиглах боломжтой боловч энэ хоёр нь тэнцүү байна.Буцах нь хэрэглэгчийн гүйлгээг дуусгавар болгож, хийгдэж буй хийгдээгүй бүх өөрчлөлтийг буцаах;
- SAVEPOINT танигч; SAVEPOINT нь гүйлгээнд хадгалах цэг үүсгэх боломжийг олгодог бөгөөд гүйлгээнд олон SAVEPOINT байж болно;
- RELEASE SAVEPOINT танигч; гүйлгээний хадгалах цэгийг устгах, заагдсан хадгалах цэг байхгүй үед мэдэгдлийг гүйцэтгэхэд онцгой тохиолдол гарах болно;
- ROLLBACK TO identifier, гүйлгээг цэг рүү буцаах;
- SET TRANSACTION; гүйлгээний тусгаарлах түвшинг тогтооход ашигладаг. InnoDB санах ойн систем нь READ UNCOMMITTED, READ COMMITTED, ДАХИН УНШИЖ БОЛОМЖТОЙ, SERIALIZABLE гэсэн гүйлгээний тусгаарлах түвшингээр хангадаг.
MYSQL гүйлгээг боловсруулах хоёр үндсэн арга байдаг:
1. Хүрэхийн тулд BEGIN, ROLLBACK, COMMIT-ийг ашиглана
- BEGIN гүйлгээ эхлүүлэх
- БУЦААХ гүйлгээг буцаах
- ХОРОО Гүйлгээний баталгаажуулалт
2. MySQL-ийн автоматаар гүйцэтгэх горимыг өөрчлөхийн тулд шууд SET ашиглана уу:
- 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-г тестээр захиалах:
<? 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 сувагт тавтай морил, хамгийн сүүлийн үеийн мэдээг аваарай!
📚 Энэхүү гарын авлага нь асар их үнэ цэнийг агуулсан, 🌟Энэ бол ховор боломж, бүү алдаарай! ⏰⌛💨
Хэрэв танд таалагдвал лайк дарж, хуваалцаарай!
Таны хуваалцах, дуртай зүйл бол бидний байнгын урам зориг юм!