0Pricing
SQL Academy · درس

تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW

افهم توقيت المشغلات ودقتها (على مستوى الصف مقابل العبارة)، ومعنى NEW وOLD داخل دالة المشغل

تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

ما هو المشغّل؟

المشغّل هو دالة تستدعيها قاعدة البيانات تلقائيًا قبل أو بعد تنفيذ INSERT أو UPDATE أو DELETE أو TRUNCATE على جدول.

جزآن: الدالة والمشغّل

تكتبون دالة تُرجع trigger، ثم تربطونها بجدول:

CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at := NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION set_updated_at();

BEFORE في مقابل AFTER

  • BEFORE — يُنفّذ قبل كتابة الصف، ويمكنه تعديل NEW
  • AFTER — يُنفّذ بعد الكتابة، لاستخدامه في الآثار الجانبية مثل التدقيق والإشعارات

FOR EACH ROW في مقابل FOR EACH STATEMENT

  • FOR EACH ROW — يُنفّذ مرة لكل صف متأثر؛ ويتوفر كل من NEW وOLD
  • FOR EACH STATEMENT — يُنفّذ مرة لكل عبارة، من دون الوصول إلى الصفوف الفردية

NEW وOLD

داخل مشغّل الصف:

  • NEW — الصف الجديد (INSERT وUPDATE)
  • OLD — الصف السابق (UPDATE وDELETE)

قيمة الإرجاع مهمة

بالنسبة إلى مشغّلات الصف BEFORE:

  • أعيدوا NEW للمتابعة بهذا الصف
  • أعيدوا NEW المعدّل لتغيير ما سيتم تخزينه
  • أعيدوا NULL لإلغاء العملية لهذا الصف

مرشح WHEN

التنفيذ المشروط:

CREATE TRIGGER trg_log_status
AFTER UPDATE OF status ON orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION log_status_change();

OF column

يمكن تنفيذ BEFORE/AFTER UPDATE فقط عند تغيير أعمدة محددة:

CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...

مشغّلات متعددة

تُنفّذ المشغّلات بالترتيب الأبجدي وفق اسم المشغّل. استخدموا بادئات (00_ و10_ و...) للتحكم في الترتيب.

أداء المشغّلات

تُنفّذ مشغّلات الصف مرة لكل صف — لذلك تؤدي العمليات الثقيلة داخل مشغّل صف × عمليات DML كثيرة إلى بطء. فضّلوا مشغّلات العبارات للآثار الجانبية المطبقة على دفعات.

تعطيل المشغّلات

لتجاوزها مؤقتًا:

ALTER TABLE orders DISABLE TRIGGER trg_audit;
-- bulk load...
ALTER TABLE orders ENABLE TRIGGER trg_audit;

-- Disable ALL triggers (use carefully):
ALTER TABLE orders DISABLE TRIGGER ALL;

التكرار العودي للمشغّل

يؤدي تنفيذ UPDATE بواسطة مشغّل على الجدول نفسه إلى تشغيل المشغّل مرة أخرى. استخدموا حواجز مثل pg_trigger_depth() أو صمّموا العملية بعناية.

مراجعة

تؤتمت المشغّلات الاستجابات لكل صف.

  • دالة تُرجع TRIGGER + CREATE TRIGGER
  • BEFORE للتعديل، وAFTER للآثار الجانبية
  • NEW/OLD للوصول إلى الصف
  • WHEN وOF column لتحديد الصفوف المعنية

تحقق سريع

تريدون تحديث عمود updated_at تلقائيًا عند كل تغيير في صف. ما إعداد المشغّل المناسب؟

الأسئلة الشائعة

هل درس «تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW» مجاني؟

نعم — نص درس «تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW»؟

افهم توقيت المشغلات ودقتها (على مستوى الصف مقابل العبارة)، ومعنى NEW وOLD داخل دالة المشغل تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW
  2. أساسيات دوال PL/pgSQL
  3. كتل DO والتعليمات البرمجية المجهولة
  4. تدقيق الجداول باستخدام المشغلات
← العودة إلى SQL Academy