برنامه نویسی

SQL Triggers: چه هستند و چگونه از آنها استفاده کنیم

در این مقاله، شما خواهید آموخت که یک تریگر SQL چیست، چه نوع تریگرهایی وجود دارد، چرا تریگرهای SQL مفید هستند و چگونه در یک مثال کامل از آن استفاده کنید.

تریگرهای SQL ابزار قدرتمندی هستند که هر توسعه‌دهنده‌ای که با پایگاه‌های داده سروکار دارد باید نحوه استفاده از آن را بداند. یک تریگر SQL به شما امکان می دهد تا اقدامات SQL را مشخص کنید که باید به صورت خودکار در هنگام وقوع یک رویداد خاص در پایگاه داده اجرا شوند. به عنوان مثال، می توانید از یک ماشه برای به روز رسانی خودکار یک رکورد در یک جدول هر زمان که یک رکورد در جدول دیگری وارد می شود استفاده کنید.

در این مقاله، شما یاد خواهید گرفت که تریگرهای SQL چیست، چگونه کار می کنند و چگونه از آنها در پایگاه داده خود استفاده کنید. این راهنما را دنبال کنید و در تریگرهای SQL متخصص شوید!

Trigger در SQL چیست؟

در SQL، یک تریگر یک شی پایگاه داده حاوی کد SQL است که به طور خودکار هنگام وقوع یک رویداد پایگاه داده خاص اجرا می شود. به عبارت دیگر، یک تریگر پایگاه داده توسط یک رویداد خاص “راه اندازی” می شود.

تریگرهای SQL معمولاً با یک جدول خاص مرتبط هستند. این بدان معنی است که وقتی جدول حذف می شود، تمام محرک های مرتبط با آن حذف می شوند. با توجه به یک جدول، یک تریگر SQL را می توان قبل یا بعد از رویدادهای زیر فراخوانی کرد:

  • INSERT: یک ردیف جدید در جدول درج شده است.
  • UPDATE: یک ردیف موجود از جدول به روز می شود.
  • DELETE: یک ردیف در جدول حذف می شود.

بنابراین، زمانی که یک INSERT، UPDATE، یا DELETE پرس و جوی SQL انجام می شود، RDBMS از شلیک خودکار تریگر مربوطه مراقبت می کند.

بیایید در مورد انواع تریگرهای SQL بیشتر بیاموزیم.

انواع SQL Triggers

دو نوع محرک وجود دارد: محرک های سطح ردیف و محرک های سطح بیانیه. بیایید به آنها بپردازیم.

محرک های سطح ردیف

یک راه‌انداز در سطح ردیف یک بار برای هر ردیف تحت تأثیر رویداد راه‌اندازی اجرا می‌شود که معمولاً یک INSERT، UPDATE، یا DELETE بیانیه.

به عنوان مثال، فرض کنید شما یک را تعریف کرده اید INSERT ماشه برای یک میز سپس با یک پرس و جو چندین ردیف به آن جدول اضافه می کنید. بنابراین، ماشه ردیف به طور خودکار برای هر ردیف جدید فعال می شود.

تریگرهای سطح ردیف به ویژه برای اجرای قوانین تجاری، حفظ یکپارچگی پایگاه داده و انجام خودکار وظایف SQL مفید هستند. در عین حال، آنها می توانند تأثیر قابل توجهی بر عملکرد یک پایگاه داده داشته باشند. این امر به ویژه در صورتی صادق است که آنها به طور گسترده مورد استفاده قرار گیرند یا حاوی پرس و جوهای پیچیده باشند. بنابراین، شما باید از محرک‌های سطح ردیف فقط در مواقع ضروری استفاده کنید.

محرک های سطح بیانیه

یک تریگر در سطح بیانیه یک بار برای کل رویداد راه انداز، به جای یک بار برای هر ردیف تحت تأثیر رویداد، اجرا می شود. محرک های سطح بیانیه برای انجام یک عمل بر اساس اثر کلی یک مفید هستند INSERT، UPDATE، یا DELETE بیانیه، به جای ردیف های جداگانه.

از Cases برای SQL Triggers استفاده کنید

حال بیایید نگاهی به سه مورد رایج استفاده از ماشه SQL بیندازیم. بیاموزید که چرا و چه زمانی تریگرهای SQL مفید هستند.

اجرای قوانین تجاری

تریگرهای SQL را می توان برای اجرای خودکار قوانین تجاری در سطح پایگاه داده استفاده کرد. به عنوان مثال، می توان از یک ماشه استفاده کرد تا اطمینان حاصل شود که قیمت یک محصول هرگز کمتر از هزینه آن + 10٪ تنظیم نمی شود.

خودکار کردن وظایف

تریگرها برای خودکارسازی وظایف در پایگاه داده و اجتناب از انجام وظایف زمانبندی عالی هستند. به عنوان مثال، می‌توانید از تریگرهای SQL برای ثبت خودکار داده‌ها، به‌روزرسانی جدول تجمیع داده‌ها یا پر کردن جدول اعلان‌های کاربر استفاده کنید.

حفظ یکپارچگی پایگاه داده

برای اطمینان از اینکه داده ها در یک پایگاه داده ثابت و دقیق باقی می مانند، می توان از محرک ها استفاده کرد. به عنوان مثال، می توانید یک تریگر SQL تعریف کنید تا مطمئن شوید که یک کلید خارجی در یک جدول خلاصه زمانی که یک رکورد جدید درج می شود، کپی می شود.

نحوه ایجاد یک SQL Trigger

سینتکس ایجاد یک تریگر SQL از یک RDBMS به دیگری تغییر می کند. در عین حال، ایده های کلی پشت آنها یکسان است. در این پست وبلاگ، تریگرها را در MySQL خواهید دید، اما تریگرها در سایر سیستم های مدیریت پایگاه داده به همین ترتیب عمل می کنند.

با موارد زیر می توانید یک تریگر در MySQL ایجاد کنید CREATE TRIGGER بیانیه:

CREATE
    [DEFINER = user]
    TRIGGER [IF NOT EXISTS] <trigger_name>
    <trigger_time> <trigger_event>
    ON <table_name> FOR EACH ROW
    [<trigger_order>]
    <trigger_body>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایی که:

  • <trigger_name> نامی است که به ماشه داده شده است.
  • <trigger_time> می تواند دو مقدار داشته باشد – BEFORE یا AFTER – آنها تعیین می کنند که چه زمانی ماشه باید فراخوانی شود.
  • <trigger_event> می تواند INSERT، UPDATE یا DELETE باشد و رویداد پایگاه داده ای را که تریگر را فعال می کند، تعریف می کند.
  • <table_name> جدولی برای ارتباط با ماشه است.
  • <trigger_body> دارد دنبال می کند | نحو PRECEDES و به شما امکان می دهد تا در صورت وجود چندین تریگر، ترتیب اجرای تریگرها را در جدول مشخص کنید.
  • <trigger_body> کد SQL است که هنگام فراخوانی تریگر اجرا می شود.

چه زمانی <trigger_event> روی می دهد <table_name> جدول، <trigger_name> ماشه در اجرا خواهد شد <trigger_time>. در جزئیات، MySQL کد SQL را اجرا خواهد کرد. یک تریگر در SQL اینگونه کار می کند.

اگر از MySQL استفاده می کنید، توجه داشته باشید که FOR EACH ROW بخشی از CREATE TRIGGER نحو، ماشه را مجبور می کند تا یک ماشه در سطح ردیف باشد. این به این دلیل است که MySQL فقط از تریگرهای سطح ردیف پشتیبانی می کند. در اوراکل، می توانید با تعیین FOR، تریگرهای سطح بیانیه ایجاد کنید EACH STATEMENT بجای FOR EACH ROW.

همچنین به خاطر داشته باشید که MySQL OLD و NEW کلمات کلیدی دسترسی به ستون های ردیف های تحت تاثیر یک ماشه را فراهم می کنند. OLD به شما امکان می دهد قبل از به روز رسانی به ستون های ردیف دسترسی داشته باشید NEW به شما امکان می دهد به مقادیر ستون جدید دسترسی داشته باشید.

مثال های SQL Trigger

بیایید اکنون چند نمونه تریگر SQL را ببینیم. توجه داشته باشید که تمام مثال های زیر در MySQL خواهند بود، اما شما به راحتی می توانید آنها را با سایر فناوری های RDBMS تطبیق دهید.

مثالی از یک ماشه INSERT

در اینجا مثالی از یک تریگر MySQL آورده شده است که نحوه ایجاد یک تریگر SQL را نشان می دهد که پس از INSERT بیانیه:

CREATE TRIGGER log_user_data
AFTER INSERT ON users
FOR EACH ROW
BEGIN
    INSERT INTO user_creation_log(id, created_at, created_by)
    VALUES (NEW.id, NOW(), NEW.created_by)
END;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هر زمان که یک رکورد جدید در آن وارد شود، این ماشه فعال می شود users جدول. در جزئیات، به طور خودکار برخی از داده ها را وارد می کند user_creation_log جدول. توجه داشته باشید که NEW.id و NEW.created_by رجوع به مقادیر id و شود created_by ستون های سطر جدید که به تازگی در درج شده است users جدول.

شما می توانید این تریگر را در DbVisualizer به صورت زیر ایجاد کنید:

راه اندازی پرس و جو ایجاد ماشه در DbVisualizer

راه اندازی پرس و جو ایجاد ماشه در DbVisualizer

وضعیت “SUCCESS” نشان داده شده توسط DbVisualizer به شما کمک می کند تا متوجه شوید که عملیات به درستی اجرا شده است و ماشه همانطور که انتظار می رفت ایجاد شده است.

به استفاده از دستور DbVisualizer @delimiter در CREATE TRIGGER پرس و جو. این دستور به صورت داخلی MySQL را فراخوانی می کند DELIMITER دستور، که به طور موقت نقطه ویرگول پیش فرض را تغییر می دهد. جداکننده که توسط MySQL برای جداسازی عبارات استفاده می شود. این امر ضروری است زیرا الف CREATE TRIGGER پرس و جو حاوی چند نقطه ویرگول است ;. برای اجرای دستور ایجاد ماشه، باید به طور موقت جداکننده نقطه ویرگول را به یک جداکننده دیگر تغییر دهید. در مثال ارائه شده در زیر، جداکننده جدید است %%%.

به همین ترتیب، می توانید با کلیک راست بر روی پایگاه داده خود، انتخاب گزینه “Create trigger” و پر کردن پنجره پاپ آپ زیر در صورت نیاز، یک تریگر در DbVisualizer ایجاد کنید:

پنجره ایجاد ماشه در DbVisualizer

پنجره ایجاد ماشه در DbVisualizer

سپس بر روی دکمه “Execute” کلیک کنید تا ماشه ایجاد شود.

اگر دوباره به پایگاه داده خود وصل شوید، در منوی کشویی DbVisualizer “Triggers”، اکنون به log_user_data ماشه. در اینجا، می توانید تعریف ماشه را ببینید:

مشاهده یک ماشه در DbVisualizer

مشاهده یک ماشه در DbVisualizer

اکنون، هر زمان که یک رکورد کاربری جدید ایجاد می کنید، برخی از داده های آن وارد می شود user_creation_log جدول. برای مثال، اگر کوئری زیر را راه اندازی کنید:

INSERT INTO users(id, nickname, points, created_by)
VALUES (NULL, "test", 3100, 3);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

user_creation_log سپس حاوی داده های زیر خواهد بود:

ردیف توسط ماشه ایجاد شد

ردیف توسط ماشه ایجاد شد

این رکورد توسط INSERT ماشه تعریف شده در بالا

و voilà! شما به تازگی یاد گرفتید که چگونه یک INSERT ماشه را با کمک DbVisualizer. به طور مشابه، می توانید از DbVisualizer برای ایجاد استفاده کنید UPDATE و DELETE باعث می شود. در جزئیات، DbVisualizer همچنین به شما اجازه می‌دهد تا در میان تریگرها جستجو کنید و درخواست آنها را مستقیماً در یک پنجره بازشو به‌روزرسانی بصری کنید.

نتیجه

در اینجا، شما یاد گرفتید:

  • تریگر SQL چیست.
  • تفاوت بین تریگرهای سطح ردیف و تریگرهای سطح بیانیه.
  • نحوه کار تریگرها در SQL
  • نحوه ایجاد INSERT، UPDATE، و DELETE باعث می شود.

تریگرهای SQL ابزاری قدرتمند برای به روز نگه داشتن خودکار داده ها از پایگاه داده شما هستند. از آنجایی که محرک ها بر عملکرد و کیفیت داده های پایگاه داده شما تأثیر می گذارند، باید با دقت با آنها برخورد کنید. به طور جزئی، اتخاذ یک سرویس گیرنده پایگاه داده که پشتیبانی از SQL trigger را ارائه می دهد، مانند DbVisualizer، یکی از بهترین راه ها برای جلوگیری از سردرد هنگام برخورد با محرک ها است. DbVisualizer را به صورت رایگان امتحان کنید!

سوالات متداول در مورد SQL Triggers

انواع مختلف تریگرها در SQL Server چیست؟

در SQL Server چهار نوع تریگر وجود دارد:

چند نوع تریگر را می توان روی یک جدول اعمال کرد؟

تعداد انواع محرک‌هایی که می‌توان روی یک جدول اعمال کرد به RDBMS مورد استفاده بستگی دارد.

به عنوان مثال، در اوراکل، می توانید تا 12 نوع تریگر را روی یک جدول اعمال کنید: 3 BEFORE EACH STATEMENT، 3 AFTER EACH STATEMENT، 3 BEFORE EACH ROW، و 3 AFTER EACH ROW. MySQL تنها از 6 ترکیب از تریگرها و سایر سیستم های مدیریت پایگاه داده مانند ? پشتیبانی می کند….

چند ماشه را می توان روی یک جدول اعمال کرد؟

تعداد محرک‌هایی که می‌توان روی یک جدول اعمال کرد، معمولاً با حداکثر تعداد اشیاء پایگاه داده پشتیبانی شده توسط فناوری RDBMS محدود می‌شود. در SQL Server می توانید 2,147,483,647 شی در پایگاه داده داشته باشید. در مقابل، با توجه به جدول، نسخه‌های قدیمی‌تر RDBMS‌ها معمولاً فقط یک ماشه را برای هر نوع مجاز می‌دانستند. توجه داشته باشید که این یک محدودیت واقعی نبود، زیرا یک تریگر می تواند چندین پرس و جو را انجام دهد.

RDBMS هایی که از چندین تریگر روی یک جدول پشتیبانی می کنند، عموماً توانایی تعریف ترتیب اجرای تریگرها را فراهم می کنند. به این ترتیب، می توانید جریانی را که در آن ماشه ها شلیک می شوند، کنترل کنید.

چگونه یک تریگر SQL را حذف کنیم؟

شما به راحتی می توانید یک تریگر در SQL را با DROP TRIGGER بیانیه. به صورت زیر از آن استفاده کنید:

DROP TRIGGER <trigger_name>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایی که <trigger_name> نام ماشه ای است که می خواهید رها کنید.

چگونه یک تریگر را در SQL به روز کنیم؟

در SQL Server می‌توانید مستقیماً یک تریگر را با ALTER TRIGGER بیانیه. از سوی دیگر، MySQL، Oracle و PostgreSQL از به‌روزرسانی‌های ماشه پشتیبانی نمی‌کنند. اگر می خواهید یک تریگر را در MySQL یا Oracle به روز کنید، می توانید از آن استفاده کنید CREATE OR REPLACE. این دستور SQL ویژه به شما امکان می‌دهد یک ماشه جدید ایجاد کنید یا یک موجود را بازنویسی کنید.

در تمام RDBMS های دیگری که از CREATE OR REPLACE پشتیبانی نمی کنند، مانند PostgreSQL، برای به روز رسانی یک تریگر، ابتدا باید آن را حذف کنید و یکی با همان نام را دوباره ایجاد کنید.

امیدواریم از خواندن این مقاله لذت برده باشید، با آشنایی با وبلاگ DbVisualizer که در اینجا یافت می شود، در مورد سیستم های مدیریت پایگاه داده و عملکرد آنها بیشتر بدانید و تا دفعه بعد!

درباره نویسنده

آنتونلو زانینی یک مهندس نرم افزار است و اغلب از خود به عنوان اسقف فناوری یاد می کند. رسالت او گسترش دانش از طریق نوشتن است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا