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

Partial Undo with SAVEPOINT نقاط الحفظ الجزئية SAVEPOINT

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

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

الصف 1 شرح توضيحي

في العمليات متعددة المراحل مثل إصدار الفواتير، قد ترغب في الاحتفاظ بالخطوات الأساسية الناجحة (مثل تسجيل المنتج الرئيسي) حتى لو فشلت خطوة فرعية اختيارية (مثل إضافة عرض ترويجي). يتيح لك MySQL 8 وضع علامات مرجعية مسماة داخل المعاملة النشطة عبر الأمر SAVEPOINT:

  • SAVEPOINT sp_after_core;: ينشئ نقطة حفظ مرجعية بعد إدراج البند الأساسي الأول (901).
  • INSERT INTO invoice_items VALUES (902, ...): يدرج بنداً إضافياً بعد نقطة الحفظ.
  • ROLLBACK TO SAVEPOINT sp_after_core;: يتراجع جزئياً عن الأوامر التي نُفذت بعد العلامة sp_after_core فقط (يلغي البند 902) مع إبقاء المعاملة مفتوحة والاحتفاظ بالبند الأساسي 901.
  • COMMIT;: يعتمد المعاملة نهائياً ليُحفظ البند 901 على القرص.
+---------+------------+--------------+--------+
| item_id | invoice_id | item_label   | price  |
+---------+------------+--------------+--------+
|     901 |         40 | Core License | 120.00 |
+---------+------------+--------------+--------+
SQL
START TRANSACTION;
INSERT INTO invoice_items VALUES (901, 40, 'Core License', 120.00);
SAVEPOINT sp_after_core;

INSERT INTO invoice_items VALUES (902, 40, 'Trial Addon', 999.00);
ROLLBACK TO SAVEPOINT sp_after_core;
COMMIT;