Verilənlər bazalarında tranzaksiya izolasiya səviyyələrini bilirsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
SQL standartında dörd izolyasiya səviyyəsi müəyyən edilmişdir: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: Ən aşağı səviyyə. Bir əməliyyat hələ təsdiqlənməmiş (yəni, başqa bir əməliyyat tərəfindən yerinə yetirilmiş və hələ
COMMITedilməmiş) məlumatları oxuya bilər. Bu, "çirkli" oxumalara (dirty reads) səbəb olur. -
Read Committed: Əməliyyat yalnız onun başlamasından əvvəl və ya zamanı təsdiqlənmiş məlumatları görür. "Çirkli" oxumaları qarşısını alır, lakin təkrarlanmayan oxumaları (non-repeatable reads) və fantom oxumaları (phantom reads) icazə verir.
- Təkrarlanmayan oxumalar: Eyni əməliyyat daxilində eyni oxuma müxtəlif məlumatlar qaytara bilər, çünki başqa bir əməliyyat onları dəyişib və təsdiqləyib.
- Fantomlar:
WHEREşərti ilə sorğu icra edilərkən, ikinci əməliyyat şərti ödəyən sətirləri əlavə edir və ya silir, və ilk əməliyyatda eyni sorğu yenidən icra edildikdə fərqli sətir dəstini qaytarır.
-
Repeatable Read: Əməliyyat yalnız onun başlamasından əvvəl təsdiqlənmiş məlumatları görür. Eyni sətirlərin təkrarlanan oxumaları eyni məlumatları qaytarır. "Çirkli" və təkrarlanmayan oxumaları qarşısını alır. Fantomlara icazə verir.
// Repeatable Read nümunəsi // Əməliyyat 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Məsələn, 100 // Əməliyyat 2 (eyni zamanda işləyir) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Yeni istifadəçi', 'active'); // COMMIT; // Əməliyyat 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Hələ də 100 (fantom) // COMMIT; -
Serializable: Ən yüksək izolyasiya səviyyəsi. Paralel əməliyyatların, müəyyən bir ardıcıllıqla icra olunmuş kimi davranmasını təmin edir. "Çirkli" oxumaları, təkrarlanmayan oxumaları və fantomları qarşısını alır. Bloklamalar səbəbindən performans aşağı düşə bilər.
Fərqli DBMS-lərdə, izolyasiya səviyyələrinin özünəməxsus tətbiqləri və xüsusiyyətləri ola bilər, həmçinin əlavə səviyyələr də mövcuddur. Məsələn, MySQL InnoDB-də, standart Repeatable Read-dir.