شرح صفوف ومحتوى الفقرة
عندما تتعامل مئات الجلسات المتزامنة مع نفس الجداول قراءةً وكتابةً، يحدد معيار SQL القياسي ثلاث ظواهر تزامن (Read Phenomena) صُممت مستويات العزل لمنعها:
- القراءة المتسخة (
Dirty Read): أن تقرأ الجلسة (أ) بيانات عدلتها الجلسة (ب) قبل اعتمادها؛ فإذا نفذت الجلسة (ب) أمرROLLBACKلاحقاً، تكون الجلسة (أ) قد بنت قرارها على بيانات وهمية. - القراءة غير القابلة للتكرار (
Non-Repeatable Read): أن تقرأ الجلسة (أ) نفس الصف مرتين داخل معاملة واحدة فتجد قيمته قد تغيرت لأن الجلسة (ب) اعتمدت أمرUPDATEبين القراءتين. - القراءة الشبحية (
Phantom Read): أن تنفذ الجلسة (أ) استعلام نطاق شرطي مرتين فتظهر صفوف جديدة لم تكن موجودة لأن الجلسة (ب) اعتمدت أمرINSERTضمن ذلك النطاق. SELECT @@transaction_isolation: يستعلم عن مستوى العزل النشط في الجلسة والخادم (REPEATABLE-READافتراضياً في MySQL 8).
+-------------------+-------------------+
| session_isolation | global_isolation |
+-------------------+-------------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-------------------+-------------------+
SQL
SELECT @@transaction_isolation AS session_isolation,
@@global.transaction_isolation AS global_isolation;
START TRANSACTION;
SELECT account_id, balance FROM wallet_ledgers WHERE account_id = 101;
COMMIT;