مشغلات SQL: الدليل الأساسي

المشغلات هي كيانات قاعدة البيانات في SQL Server. من الناحية الفنية ، فهي فئة معينة من استدعاءات الوظائف التي تستجيب لعمليات قاعدة بيانات محددة.

سيعطيك هذا الدليل الأساسي معلومات متعمقة حول مشغلات SQL التي يمكن أن تكون مفيدة جدًا في مهنتك. هيا بنا نبدأ!

ما هي SQL Triggers؟

تصف كلمة “المشغل” بيانًا يفيد بأن الخادم يقوم تلقائيًا بتنفيذ الاستعلام في كل مرة يتم فيها تغيير المحتوى في قاعدة البيانات.

المشغل عبارة عن مجموعة من استعلامات SQL المسماة خصيصًا والتي يتم تخزينها في مساحة الذاكرة. إنه نوع محدد من استدعاء الوظيفة يتم استدعاؤه فورًا عند حدوث أي حدث في قاعدة البيانات. كل مشغل له جدول مخصص له.

على سبيل المثال ، يمكن تنشيط المشغل كلما تمت إضافة عمود جديد إلى جدول معين أو إذا تم تغيير سجلات معينة.

وفقًا لشبكة مطوري Microsoft ، تعد المشغلات فئة معينة من الإجراءات المخزنة. في بيان المشغل ، نحدد في البداية متى يجب تشغيل المشغل ، ثم نقدم الإجراء الذي يجب اتخاذه بعد تنشيط المشغل.

بناء الجملة:

CREATE TRIGGER trigger_name
BEFORE/AFTER
INSERT/UPDATE/DELETE
ON tableName
FOR EACH ROW SET operation [trigger_body];

شرح كل متغير

  • إنشاء اسم المشغل المشغل – يتم استخدامه لإنشاء مشغل أو لتغيير اسم مشغل موجود.
  • قبل / بعد – يُستخدم هذا الاستعلام لتحديد وقت تنفيذ المشغل (قبل أو بعد حدث معين).
  • إدراج / تحديث / حذف – يصف هذا الإجراء الذي نرغب في اتخاذه على الجداول.
  • ON tableName – هنا ، نحدد اسم الجدول لإعداد مشغل.
  • FOR EACH ROW – تتعلق هذه العبارة بمشغل الصف ، مما يعني أنه سيتم تنفيذ المشغلات كلما تم تغيير الصف.
  • Trigger_body – يحدد الإجراء الذي يجب اتخاذه عند تنشيط المشغل.

المشغلات هي وظائف مخزنة بهويات مميزة تمكننا من إعادة استخدام الاستعلامات التي تم تنفيذها بالفعل وتخزينها بشكل آمن في الذاكرة. الآن دعنا نحاول فهم سبب احتياج SQL لهم.

تُستخدم المشغلات في الغالب لتنظيم نشر الكود كلما وقع حدث ما. بعبارة أخرى ، يعد استخدام المشغلات هو الخيار المثالي إذا كنت تحتاج إلى جزء معين من التعليمات البرمجية ليتم تشغيله باستمرار استجابة لحدث معين.

فيما يلي بعض فوائد استخدام المشغلات في عمليات قاعدة بيانات SQL.

  • يقوم بإجراء فحوصات إضافية عند إدراج البيانات أو تحديثها أو حذفها من الجدول المتأثر.
  • يقلل أوقات الاستجابة ، مما يساعد في زيادة نفقات الحوسبة.
  • لتمكين ترميز المعلمات الافتراضية المعقدة التي لا يمكن الوصول إليها عن طريق القيود الأولية.
  • تكامل المرجع هو خاصية أساسية أساسية لأنظمة قواعد البيانات العلائقية. هذا يدل على أن البيانات المحفوظة في نظام قاعدة البيانات يجب أن تكون دقيقة دائمًا لكل معاملة وكل عملية.

    إذا كان هناك جدولان موجودان في قواعد بيانات أو أنظمة منفصلة ، فلا توجد طريقة لضمان التحقق من صحة البيانات داخلهما باستخدام قيم القيد. في مثل هذه الحالة ، تكون المشغلات هي الخيار الوحيد للتنفيذ.

      كيفية تنشيط لعبة الكريكيت على الهاتف

    مزيج من الحجج الزناد

    لكل جدول ، يمكننا تحديد ستة أنواع مختلفة من المشغلات. هذه هي مجموعة من وسيطات Trigger المضمنة في مشغلات SQL على مستوى الصف.

    قبل الإدراج: تقوم هذه المشغلات بتنفيذ الإجراء على الصفوف قبل تنفيذ أي عمليات INSERT في الجدول المحدد أو في قاعدة البيانات.

    بعد INSERT: ينفذ الإجراء على الصفوف مباشرة بعد أي نشاط INSERT لقاعدة البيانات.

    قبل التحديث: باستخدام هذه المشغلات ، يتم تنفيذ وظيفة في الصفوف قبل إجراء التحديث الذي يتم تنفيذه في قاعدة البيانات.

    بعد التحديث: ينفذ الإجراء على الصفوف فورًا بعد أي قاعدة بيانات أو نشاط تحديث جدول معين.

    قبل الحذف: ينفذ عملية معينة على الصفوف حتى قبل أن تتعرض قاعدة البيانات أو الجدول لإجراء حذف.

    بعد الحذف: تقوم هذه المشغلات بتنفيذ الإجراء على الصفوف التي تلي كل معاملة DELETE.

    أنواع مشغلات SQL

    مشغلات SQL هي وظائف مخزنة يتم تشغيلها على الفور عند حدوث أحداث معينة. يشبه الجدولة المدفوعة بالحدث. يمكن أن تبدأ المواقف اللاحقة في تنفيذ المشغلات.

    مشغلات DML – يرمز DML إلى لغة معالجة البيانات. أصبح تنفيذ التعليمات البرمجية ردًا على تعديل البيانات ممكنًا باستخدام مشغلات DML. يتم تنشيط هذا المشغل عندما يتم تنفيذ أوامر DML مثل INSERT و UPDATE و DELETE. وتسمى هذه أيضًا “مشغلات مستوى الجدول”.

    مشغلات DDL – يرمز DDL إلى لغة تعريف البيانات. تمكّننا مشغلات DDL من تشغيل التعليمات البرمجية كرد فعل على تغييرات مخطط قاعدة البيانات ، مثل إضافة الجداول أو حذفها ، أو أحداث الخادم ، مثل عندما يقوم المستخدم بتسجيل الوصول. وتسمى هذه “مشغلات مستوى قاعدة البيانات”.

    يمكن تنشيط هذه المشغلات ، عند تنفيذ بعض عبارات DDL مثل CREATE أو ALTER أو DROP في قاعدة البيانات النشطة. يمكن أيضًا استخدامها لمراقبة الأنشطة التي يتم تنفيذها وإدارتها.

    مشغلات تسجيل الدخول – عند حدوث أي حدث تسجيل دخول (بدء التشغيل ، تسجيل الدخول ، تسجيل الخروج ، إيقاف التشغيل) ، يتم استدعاء مشغلات تسجيل الدخول على الفور. يتم تنفيذها فقط بعد عملية مصادقة المستخدم حتى قبل بدء معاملة المستخدم. لن يتم تشغيل مشغلات LOGON إذا فشل التفويض.

    يمكن استخدام هذه المشغلات لتسجيل محفوظات تسجيل الدخول أو إنشاء تقييد حدث لتسجيل دخول معين ، من بين وظائف التدقيق وإدارة الهوية الأخرى لاتصالات الخادم.

    مشغلات CLR – يرمز CLR إلى وقت تشغيل اللغة المشترك. تعد مشغلات CLR بالفعل مجموعة فرعية فريدة من المشغلات المبنية في الغالب على CLR داخل تقنية .NET. تكون هذه المشغلات مفيدة إذا كان المشغل يحتاج إلى إجراء الكثير من العمليات الحسابية أو يحتاج إلى الارتباط بكيان آخر غير SQL.

    يمكن بالفعل إنشاء مشغلات DML و DDL عن طريق تمكين ترميز مشغلات CLR المدعومة في تقنيات .NET بما في ذلك Visual Basic و C # و F-sharp.

    نموذج مشغل خادم SQL

    دعونا نفهم مفاهيم الزناد هذه بمثال.

    أولاً ، لنقم بإنشاء قاعدة بيانات باستخدام عبارات SQL.

    CREATE DATABASE testdb;
    use testdb;

    هنا ، أعطيت “testdb” كاسم لقاعدة البيانات. والخطوة التالية هي إنشاء جدول.

    CREATE TABLE student(
      name varchar(25),
      id int(2),
      maths int(2),
      physics int(2),
      biology int(2),
      social int(2),
      total int(2)
     );

    لقد قمت بإنشاء جدول لتخزين تفاصيل الطالب. وإليك الأمر لوصف هيكل الجدول. هنا “الطالب” هو اسم الجدول الذي قدمته.

    DESC student;

    يوجد أدناه هيكل الجدول الذي قمت بإنشائه.

    +---------+-------------+------+-----+---------+-------+
    | Field   | Type        | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | name    | varchar(25) | YES  |     | NULL    |       |
    | id      | int         | YES  |     | NULL    |       |
    | maths   | int         | YES  |     | NULL    |       |
    | physics | int         | YES  |     | NULL    |       |
    | biology | int         | YES  |     | NULL    |       |
    | social  | int         | YES  |     | NULL    |       |
    | total   | int         | YES  |     | NULL    |       |
    +---------+-------------+------+-----+---------+-------+
    7 rows in set (0.00 sec)

    بعد إنشاء الجدول ، فإن الخطوة التالية هي إعداد مشغل. دعنا نحاول استخدام الوسيطة BEFORE INSERT.

      صور Google مقابل صور أمازون

    اسم المشغل الذي قمت بإنشائه هو “علامات”. بمجرد تعديل الجدول بتقديرات الطالب ، يحاول المشغل أدناه تحديد التقدير الإجمالي للطالب تلقائيًا.

    CREATE TRIGGER marks
    BEFORE INSERT
    ON
    student
    FOR EACH ROW
    set new.total=new.maths+new.physics+new.biology+new.social;

    نظرًا لأننا مطالبون باستبدال بيانات الصفوف بدلاً من العمل مع البيانات القديمة ، فقد حددنا “إجمالي” باستخدام اسم فئة جديد ، وكل التعبيرات اللاحقة مسبوقة بكلمات رئيسية جديدة بعد المجموع باستخدام عامل التشغيل النقطي. الآن ، سنضيف قيمًا إلى كل صف ونرى النتائج. في البداية ، تكون العلامة الإجمالية 0 لكل طالب.

    INSERT INTO student VALUES("George",02,99,87,92,91,0);
    INSERT INTO student VALUES("James",03,91,81,94,90,0);
    INSERT INTO student VALUES("Harry",04,86,70,73,88,0);
    INSERT INTO student VALUES("John",05,73,89,78,92,0);
    INSERT INTO student VALUES("Lisa",01,94,75,69,79,0);
    

    سيتم تشغيل بيان المشغل تلقائيًا عند إدراج البيانات في جدول الطالب في هذه الحالة. سيتم احتساب مجموع علامات كل طالب بواسطة المشغل. الآن ، دعنا نرى ما إذا تم استدعاء المشغل أم لا باستخدام عبارة SELECT.

    SELECT * FROM table_name;

    وهنا الناتج النهائي.

    mysql> select * from student;
    +--------+------+-------+---------+---------+--------+-------+
    | name   | id   | maths | physics | biology | social | total |
    +--------+------+-------+---------+---------+--------+-------+
    | George |    2 |    91 |      81 |      94 |     90 |   356 |
    | James  |    3 |    86 |      70 |      73 |     88 |   317 |
    | Harry  |    4 |    73 |      89 |      78 |     92 |   332 |
    | John   |    5 |    94 |      75 |      69 |     79 |   317 |
    | Lisa   |    1 |    99 |      87 |      92 |     91 |   369 |
    +--------+------+-------+---------+---------+--------+-------+
    5 rows in set (0.00 sec)

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

    عمليات الزناد الإضافية

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

    استعلام للتحقق مما إذا كان هناك مشغل معين أم لا

    يتحقق هذا الأمر من المشغل المحدد في قاعدة البيانات بأكملها.

    SELECT * FROM [sys].[triggers] WHERE [name] = 'Trigger_name'

    الاستعلام لعرض المشغلات

    سيتم عرض جميع المشغلات المتوفرة في قاعدة البيانات النشطة بالبيان التالي.

    SHOW TRIGGERS;

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

    يقوم الأمر أدناه بإلغاء تنشيط المشغل في قاعدة البيانات العاملة.

    DISABLE TRIGGER trigger_name ON DATABASE;

    يمكنك أيضًا تحديد اسم جدول معين لتعطيل المشغل.

    DISABLE TRIGGER trigger_name ON table_name;

    استعلام لتمكين المشغل

    يقوم الأمر التالي أولاً بإلغاء تنشيط مشغل معين تم تحديده في الجدول المحدد في قاعدة البيانات النشطة قبل إعادة تمكينه.

    ALTER TABLE table_name DISABLE TRIGGER trigger_name
    
    ALTER TABLE table_name ENABLE TRIGGER trigger_name

    يجب تعطيل المشغل ، قبل محاولة تمكينه ،

      كيفية إلغاء اشتراك Instacart

    استعلام لتمكين أو تعطيل كافة المشغلات في جدول

    باستخدام عبارة SQL أعلاه ، يمكننا إلغاء تنشيط أو تنشيط جميع مشغلات الجدول في وقت واحد عن طريق استبدال “ALL” بدلاً من اسم مشغل محدد.

    ALTER TABLE table_name DISABLE TRIGGER ALL 
    
    ALTER TABLE table_name ENABLE TRIGGER ALL

    استعلام عن حذف أو إسقاط المشغل

    يمكن حذف المشغل بحذفه أو حذف الجدول بأكمله. يتم أيضًا حذف كل مشغل ذي صلة عند حذف جدول.

    DROP TRIGGER [trigger_name];

    عند حذف مشغل ، يتم حذف البيانات ذات الصلة من جدول بيانات sys.objects.

    مزايا المشغلات

    • من السهل بناء المشغلات ويمكن للمشغل نفسه استدعاء الوظائف والأساليب المخزنة.
    • يمكن للمستخدمين تنفيذ تدقيق بسيط باستخدام المشغلات.
    • للأسف ، لا يمكنك إنشاء قيود عبر الكيانات في أنظمة قواعد البيانات باستخدام SQL Server ، على الرغم من أنه يمكنك محاكاة تشغيل القيود من خلال استخدام المشغلات.
    • يمكن تنفيذ قيود النزاهة عبر قواعد البيانات باستخدام المشغلات.
    • عندما يكون التحقق من صحة المجموعة مطلوبًا بدلاً من التحقق صفًا تلو الآخر من البيانات التي تم إدخالها أو تغييرها حديثًا ، يمكن أن تكون المشغلات مفيدة.

    عيوب المشغلات

    قد لا تكون SQL Triggers الخيار الأفضل في بعض المواقف نظرًا لقيودها.

    • يجب توثيق المشغلات بدقة.
    • نظرًا لتنفيذ قاعدة البيانات المتزامن الذي قد لا يكون الوصول إليه متاحًا لمكونات التطبيق ، يمكن أن تكون المشغلات صعبة في تصحيح الأخطاء.
    • تصبح عبارات DML أكثر تعقيدًا عند استخدام المشغلات.
    • حتى مشكلة الزناد الصغيرة لديها القدرة على أن تؤدي إلى أخطاء منطقية في البيان.

    استنتاج

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

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

    بالإضافة إلى ذلك ، تنظم المشغلات نمط التحديث الذي يُسمح لقاعدة البيانات بقبوله. من المفيد للغاية الاحتفاظ بقيود تكامل البيانات في نظام قاعدة البيانات إذا لم تكن مفاتيح قيود SQL موجودة بشكل أساسي في المفتاح الأساسي والمفتاح الخارجي.

    آمل أن تكون قد وجدت هذه المقالة مفيدة في التعرف على مشغلات SQL.

    إذا كنت ترغب في تعلم قواعد البيانات بشكل متعمق ، فإليك بعض الموارد الممتازة لتعلم SQL و NoSQL.