الـ transaction يجمع العبارات في وحدة ذرّية واحدة: إمّا أن تُؤكَّد كلها أو تُتراجَع كلها، ما يمنحك A وC وI وD في ACID. ومستوى العزل يضبط الـ "I" — كم يمكن للـ transactions المتزامنة أن ترى من بيانات بعضها غير المؤكَّدة أو المتغيّرة.
الـ transaction يجمع العبارات في وحدة ذرّية واحدة: إمّا أن تُؤكَّد كلها أو تُتراجَع كلها، ما يمنحك A وC وI وD في ACID. ومستوى العزل يضبط الـ "I" — كم يمكن للـ transactions المتزامنة أن ترى من بيانات بعضها غير المؤكَّدة أو المتغيّرة.
| المستوى | Dirty read | Non-repeatable read | Phantom |
|---|
| READ UNCOMMITTED | ممكن | ممكن | ممكن |
| READ COMMITTED | لا | ممكن | ممكن |
| REPEATABLE READ (افتراضي InnoDB) | لا | لا | غالبًا لا* |
| SERIALIZABLE | لا | لا | لا |
*يستخدم REPEATABLE READ في InnoDB آلية MVCC (كل transaction تقرأ لقطة متّسقة) إضافةً إلى next-key locks، لذا يمنع معظم الـ phantoms أيضًا — أقوى مما يتطلّبه معيار SQL.
SELECT @@transaction_isolation; -- REPEATABLE-READ by default
START TRANSACTION;
SELECT balance FROM accounts WHERE id = 1; -- snapshot taken here
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- both updates apply, or ROLLBACK undoes both
أبقِ على الافتراضي في InnoDB (REPEATABLE READ) ما لم يكن لديك سبب. READ COMMITTED (وهو افتراضي Postgres/Oracle) يقلّل التنافس على الأقفال للأنظمة كثيفة الكتابة؛ وSERIALIZABLE صحيح لكنه يُسلسل العمل المتعارض وقد يؤدي إلى deadlock أكثر.
العزل هو القرص المتحكّم بين الصحة والتزامن. وفهم هذه الشذوذات يتيح لك تفسير أخطاء مثل "المجموع لم يتطابق تحت الحِمل" واختيار مستوى يُبقي transactions تحريك الأموال صحيحة دون خنق الإنتاجية بلا داعٍ.
مكتبة من أسئلة مقابلات تقنية المعلومات مع إجابات مفصّلة — من المبتدئ إلى المتقدم.
تبرع