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

NEW and OLD Trigger Values قراءة القيم الجديدة والقديمة

تعلّم المشغلات التلقائية Triggers والأحداث المجدولة Events في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

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

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

للوصول إلى بيانات الصف الذي يجري تعديله داخل جسم المشغل، يوفر محرك MySQL 8.4 سجلّين افتراضيين هما OLD وNEW. تعتمد إتاحة هذين السجلين على نوع العملية: في مشغلات INSERT يتوفر السجل NEW فقط لأن الصف لم يكن موجوداً من قبل؛ وفي مشغلات DELETE يتوفر السجل OLD فقط لقراءة بيانات الصف المحذوف؛ أما في مشغلات UPDATE فيتوفر السجلان معاً حيث يمثل OLD.col القيمة السابقة قبل التحديث ويمثل NEW.col القيمة الجديدة.

انتبه لقاعدة القراءة والكتابة الصارمة: السجل OLD يكون للقراءة فقط دائماً في جميع المشغلات، بينما يمكن تعديل قيم NEW.col عبر الأمر SET داخل مشغلات BEFORE INSERT وBEFORE UPDATE حصرياً، ويصبح للقراءة فقط في مشغلات AFTER لأن الصف يكون قد كُتب بالفعل في الجدول.

SQL
DELIMITER $$
CREATE TRIGGER trg_orders_after_update
AFTER UPDATE ON orders
FOR EACH ROW
BEGIN
    IF OLD.amount <> NEW.amount THEN
        INSERT INTO order_price_logs (order_id, old_amt, new_amt, changed_on)
        VALUES (OLD.order_id, OLD.amount, NEW.amount, CURRENT_TIMESTAMP);
    END IF;
END$$
DELIMITER ;

محاكي المشغلات والأحداث التفاعلي