انتقل إلى محتوى الدرس

Starting Explicit Transactions بدء المعاملة START TRANSACTION

تعلّم التحكم بالمعاملات عبر COMMIT و ROLLBACK و SAVEPOINT في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 صورة توضيحية
مخطط توضيحي لدرس التحكم بالمعاملات عبر COMMIT و ROLLBACK و SAVEPOINT في MySQL
مخطط توضيحي لدرس التحكم بالمعاملات عبر COMMIT و ROLLBACK و SAVEPOINT في MySQL

بدلاً من تعطيل متغير الجلسة SET autocommit = 0 يدوياً وتذكر إعادته، تعتمد التطبيقات القياسية في بيئات الإنتاج على بدء المعاملة صراحةً بالأمر START TRANSACTION; (أو مرادفه BEGIN;). يقوم هذا الأمر بتعليق الحفظ التلقائي مؤقتاً طوال فترة المعاملة الحالية فقط، ثم يعيد الجلسة تلقائياً إلى حالتها الأصلية فور انتهاء المعاملة:

  • START TRANSACTION;: الصيغة القياسية لفتح سياق معاملة جديدة داخل محرك InnoDB.
  • BEGIN;: مرادف مختصر في الجلسات المباشرة، لكن يُفضَّل دائماً استخدام START TRANSACTION; لأن كلمة BEGIN تُستخدم داخل الإجراءات المخزنة لبدء الكتل البرمجية.
  • UPDATE wallet_ledgers ...: تُنفَّذ أوامر الخصم والإيداع داخل مخزن المعاملة المؤقت مع الاحتفاظ بالقيم السابقة في سجل التراجع.
  • COMMIT;: ينهي المعاملة الصريحة ويعتمد التعديلات نهائياً على القرص ويعيد تفعيل الحفظ التلقائي للجلسة.
+------------+--------+---------+
| account_id | holder | balance |
+------------+--------+---------+
|        101 | Mona   |  700.00 |
|        102 | Tariq  |  600.00 |
+------------+--------+---------+
SQL
START TRANSACTION;

UPDATE wallet_ledgers SET balance = balance - 200.00 WHERE account_id = 101;
UPDATE wallet_ledgers SET balance = balance + 200.00 WHERE account_id = 102;

SELECT account_id, holder, balance FROM wallet_ledgers;
COMMIT;