شرح صفوف ومحتوى الفقرة
في العمليات متعددة المراحل مثل إصدار الفواتير، قد ترغب في الاحتفاظ بالخطوات الأساسية الناجحة (مثل تسجيل المنتج الرئيسي) حتى لو فشلت خطوة فرعية اختيارية (مثل إضافة عرض ترويجي). يتيح لك 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;