دروس الوحدة (4/4)
المحفزات العملية والتدقيق
الآن بعد أن تعلمنا كيفية تشكيل رصاصات ذكية (وظائف الزناد)، نحتاج إلى تركيبها على أسلحة جاهزة حقيقية في انتظار حدث ما: ها هي المطلقات الفعلية! يقوم المشغل رسميًا بإرفاق وظيفة تم إنشاؤها مسبقًا ويطلب منها إطلاق حدث CRUD معين "قبل" أو "بعد" في جدول معين.
هناك العديد من الخيارات. على سبيل المثال، يقوم FOR EACH ROW بتشغيله مرة واحدة لكل صف متأثر، لذلك إذا كان الاستعلام المجمع عبارة عن تحديث عالمي لأكثر من 5 ملايين صف، فسيتم تشغيل 5 ملايين عملية تنفيذ صغيرة - كن حذرًا في ذلك!
CREATE TRIGGER sync_inventory_trigger
-- Event options
AFTER INSERT OR UPDATE ON order_items
-- Modus operandi (singular or global macro-block FOR EACH STATEMENT)
FOR EACH ROW
-- Run the forged action
EXECUTE FUNCTION update_stock();المشغل غير مرئي لجافا سكريبت وسيحافظ بشكل مستقل على اتساق المخزون تمامًا بناءً على التحديثات المقدمة بأمان إلى المحرك.
أتمتة Update_At
هناك مشكلة عمل دائمة حيث ننسى تمرير { updated_at: new Date() } في نماذج تحديث JS الخاصة بنا. تعمل وظيفة التشغيل set_updated_at مع مشغل BEFORE UPDATE على إزالة هذا الإزعاج، وتحديث كل تغيير في السجل تلقائيًا بشكل صامت.
جربه بنفسك
قم بإنشاء مشغل باسم 'trg_force_uppercase'.\nأرفقه في مرحلة 'قبل الإدراج' في جدول 'العملاء'.\nفرض حساب صف تلو الآخر 'FOR EACH ROW' واستدعاء تنفيذ وظيفة 'force_uppercase_name()'.\nملاحظة: قم أيضًا بإعادة إنشاء UDF 'force_uppercase_name' (نظرًا لأن البيئة معزولة) في الجزء العلوي من التعليمات البرمجية، ثم قم بإلحاقه إعلان الزناد.
إظهار التلميح
بناء جملة النص: أنشئ الوظيفة أولاً، ثم أضف إنشاء TRIGGER trg_force_uppercase قبل إدراج العملاء لكل صف تنفيذ الوظيفة force_uppercase_name();
الحل متاح بعد 3 من المحاولات
قتل المستشعر! في بعض الأحيان نرغب في دفع الملفات الأولية أو التغييرات الأصلية المؤقتة من خلال تجاوز عمليات التدقيق المزعجة.\nإن إسقاط المشغل هو أمر بسيط للغاية (لا تحذف الوظيفة العضوية، بل تحذف فقط ربط المستشعر).\nاستخدم الكلمة الأساسية 'DROP TRIGGER'، مع تحديد الاسم والمرفق العام.
إظهار التلميح
تذكر أن تحدد من أين. إسقاط TRIGGER trg_force_uppercase على العملاء؛
الحل متاح بعد 3 من المحاولات