Məqalələr kataloqu
MySQL verilənlər bazasıƏməliyyatın geri qaytarılması izolyasiyası/açıq konsepsiya/səviyyə emal php bəyanatı
MySQL İşlər
MySQL əməliyyatları əsasən böyük həcmdə əməliyyatlara və yüksək mürəkkəbliyə malik verilənləri emal etmək üçün istifadə olunur.Məsələn, kadr idarəetmə sistemində bir şəxsi silsəniz, həm şəxsin əsas məlumatlarını, həm də şəxsə aid olan poçt qutuları, məqalələr və s. kimi məlumatları silmək lazımdır. əməliyyat təşkil edir!
- Əməliyyatlar MySQL-də yalnız Innodb verilənlər bazası mühərrikindən istifadə edən verilənlər bazası və ya cədvəllər üçün dəstəklənir.
- SQL ifadələrinin partiyalarının ya hamısının yerinə yetirilməsini, ya da heç birinin icra edilməməsini təmin edərək, verilənlər bazasının bütövlüyünü qorumaq üçün tranzaksiya emalı istifadə edilə bilər.
- Əməliyyatlar daxiletmə, yeniləmə, silmə ifadələrini idarə etmək üçün istifadə olunur
Ümumiyyətlə, əməliyyat 4 şərtə cavab verməlidir (ACID): Atomluq (atomluq), Ardıcıllıq (sabitlik), İzolyasiya (izolyasiya), Davamlılıq (etibarlılıq)
- 1,Əməliyyatların atomikliyi:Uğurlu və ya geri çəkilən əməliyyatlar toplusu.
- 2,sabitlik:Qeyri-qanuni məlumatlar var (xarici açar məhdudiyyətləri və s.) və əməliyyat geri götürülür.
- 3,İzolə:Əməliyyatlar müstəqil şəkildə aparılır.Əgər əməliyyatın nəticəsi digər əməliyyatlara təsir edərsə, o zaman digər əməliyyatlar geri götürüləcək.Fədakar sürət tələb edən əməliyyatların 100% təcrid edilməsi.
- 4,etibarlılıq:Proqram təminatı və aparat qəzasından sonra InnoDB məlumat cədvəlinin sürücüsü onu yenidən qurmaq və dəyişdirmək üçün log faylından istifadə edəcək.Etibarlılıq və yüksək sürət hər ikisinə malik ola bilməz, innodb_flush_log_at_trx_commit seçimi əməliyyatların nə vaxt jurnalda saxlanacağını müəyyənləşdirir.
MySQL əmr xəttinin standart parametrləri altında əməliyyatlar avtomatik olaraq həyata keçirilir, yəni COMMIT əməliyyatı SQL ifadəsi yerinə yetirildikdən dərhal sonra yerinə yetiriləcəkdir.Buna görə də, açıq şəkildə tranzaksiyaya başlamaq üçün siz BAŞLAT və ya BAŞLAMA ƏMƏLİYYƏ əmrindən istifadə etməli və ya SET AUTOCOMMIT=0 əmrini yerinə yetirməli, cari sessiya üçün avtomatik öhdəliyin istifadəsini deaktiv etməlisiniz.
Əməliyyata nəzarət bəyanatı:
- ƏMƏLİYYƏ BAŞLAYIN və ya BAŞLAYIN; açıq şəkildə əməliyyata başlayın;
- COMMIT; COMMIT WORK də istifadə edilə bilər, lakin ikisi ekvivalentdir. COMMIT əməliyyatı həyata keçirir və verilənlər bazasında edilən bütün dəyişiklikləri daimi edir;
- ROLLBACK; ROLLBACK WORK-dan istifadə etmək mümkündür, lakin ikisi ekvivalentdir.Geriyə qaytarma istifadəçinin əməliyyatını bitirir və davam edən bütün qəbul edilməmiş dəyişiklikləri geri qaytarır;
- SAVEPOINT identifikatoru; SAVEPOINT əməliyyatda saxlama nöqtəsi yaratmağa imkan verir və əməliyyatda bir neçə SAVEPOINT ola bilər;
- RELEASE SAVEPOINT identifikatoru; əməliyyatın saxlama nöqtəsini silin, qeyd edilmiş saxlama nöqtəsi olmadıqda, bəyanatın icrası istisna yaradacaq;
- identifikatora ROLLBACK TO, əməliyyatı nöqtəyə geri qaytarın;
- SET TRANSACTION; əməliyyatın izolyasiya səviyyəsini təyin etmək üçün istifadə olunur. InnoDB yaddaş mühərriki tərəfindən təmin edilən tranzaksiya izolyasiya səviyyələri OXUMADI, OXUYUN, TƏKRAR OLAN OXUYUN və SERIALİZƏLƏRDİR.
MYSQL əməliyyatlarının işlənməsinin iki əsas üsulu var:
1. Nail olmaq üçün BAŞLAYIN, GERİ DÖNDÜR, KOMİT-dən istifadə edin
- BEGIN əməliyyata başlayın
- GERİYƏ QAYTARMAQ əməliyyatın geri qaytarılması
- TƏHLÜKƏ EDİN əməliyyatın təsdiqi
2. MySQL-in avtomatik icra rejimini dəyişmək üçün birbaşa SET-dən istifadə edin:
- AUTOCOMMIT=0 SET Avtomatik qəbulu deaktiv edin
- AUTOCOMMIT=1 SET Avtomatik qəbulu aktivləşdirin
əməliyyat testi
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-də Transaction Instances istifadə
MySQL SİPARİŞİ Sınaqla:
<? 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 Blogu ( https://www.chenweiliang.com/ ) sizin üçün faydalı olan "MySQL Database Transaction Rollback Isolation/Open Concept/Precessing of PHP Statements" paylaşdı.
Bu məqalənin linkini paylaşmağa xoş gəlmisiniz:https://www.chenweiliang.com/cwl-494.html
Ən son yenilikləri əldə etmək üçün Chen Weiliang bloqunun Telegram kanalına xoş gəlmisiniz!
📚 Bu təlimatda böyük dəyər var, 🌟Bu nadir fürsətdir, qaçırmayın! ⏰⌛💨
Bəyəndinizsə paylaşın və bəyənin!
Paylaşımlarınız və bəyənmələriniz davamlı motivasiyamızdır!