آموزش ساخت و استفاده از تریگرها در SQL و MYSQL

زمانی که یک عمل خاص بر روی یک جدول یا هر شی از پایگاه داده رخ می دهد، تریگر احضار می شود. هر تریگر سه بخش اصلی دارد : نام – عمل – اجرا

نام تریگر حداکثر می تواند ۱۲۸ کارکتری باشد و بخش اجرای آن حاوی یک رویه ذخیره شده است و پایان باید گفت دو نوع تریگر داریم : تریگرهای DML و تریگرهایDDL

نکته : فقط مالک پایگاه داده ، مالک جدول و مدیران DDL می تواننند تریگر اجرا نمایند.

فرم کلی یک تریگر در SQL به صورت زیر می باشد :

بعد از دستور Create Trigger  نام تریگر مورد نظر را می نویسیم . سپس با عبارت ON مشخص می کنیم که می خواهیم روی کدام جدول یا شی از پایگاه داده تریگر اعمال نمائیم. سپس بعد از مشخص کردن جدول یا شی از  FOR – AFTER -INSTEAD OF برای کار مورد نظر خود استفاده می کنیم.( در واقع یکی از این عبارات)

نکات :

۱- تریگر های FOR و AFTER  فقط بر روی جدول کار می کنند در حالی که INSTEAD OF هم بر روی جدول و هم بر روی شی کار می کند.

۲-اگر بخواهیم در هنگام عمل بر روی جدول تریگر اعمال شود باید از FOR استفاده شود .

۳-اگر بخواهیم بعد از عمل بر روی جدول تریگر اعمال شود باید از AFTER استفاده شود.

۴-اگر بخواهیم تریگر به جای یک عمل متناظر اعمال شود از INSTEAD OF استفاده می شود.

۵- اگر بخواهیم تریگر زمانی که عمل INSERT انجام می شود احضار شود بعد از FOR – AFTER و یا INSTEAD OF از عبارت INSERT  استفاده می شود.

۶-اگر بخواهیم تریگر زمانی که عمل به روز رسانی یا عمل حذف انجام می شود ، احضار شود بعد از FOR – AFTER و یا INSTEAD OF به ترتیب باید از UPDATE و DELETE   استفاده می شود.

مثال : می خواهیم هنگامی که عمل درج انجام می شود، بررسی کند اگر نامی که می خواهد درج شود وجود داشت ، پیغام THIS NAME IS EXISTS چاپ شود و از عمل درج جلوگیری نماید .

در پایگاه داده خود جدولی به نام Department داریم و می خواهیم احضار تریگر بر روی این جدول انجام شود . در ضمن می خواهیم هنگامی که عمل دارد انجام می شود تریگر احضار شود پس باید از FOR استفاده نمائیم. پس از تعریف عبارات اولیه نوبت به بخش عملیاتی تریگر می رسد که با عبارت AS مشخص می شود :

نکته : قبل از درج هر سطر در جدولی در پایگاه داده قبل از آن ، سطر مربوطه در جدول موقت به نام inserted قرار می گیرد و سپس در جدول اصلی درج می شود. در هنگام حذف هم قبل از آن که سطر کاملا حذف شود ابتدا در جدول deleted قرار می گیرد و سپس حذف می شود.

با توجه به نکته بالا در بخش AS تریگر گفته شده در هنگام درج سطری جدید در جدول department اول بررسی کن اگر نامی که می خواهد درج شود در جدول inserted وجود دارد پیغام مناسب را چاپ کن در غیر این صورت هیچ عملی انجام نده.پس در ادامه تریگر باید دستورات زیر نوشته شود. ROLLBACK TRANSACTION باعث می شود عمل درج در جدول Department  انجام نشود.

همانطور که در بالا گفته شد دو نوع تریگر داریم DDL و DML. ما می توانیم همچنین تریگرهای بنویسیم که در سطح بالاتری عمل کنند. برای مثال می خواهیم تریگری بنویسیم که به کاربران اجازه ساخت جدول را ندهیم.

همانطور که مشاهده می شود بعد از ON عبارت DATABASE را نوشتیم که سطح تریگر را مشخص می کند و بعد از آن بیان شده که اگر دستور ساخت جدول از سوی کاربر صادر شود بخش AS تریگر اجرا شده و پیغام مناسب نمایش داده شود و در ضمن جلوی ساخت جدول نیز گرفته شود.

مثال : می خواهیم پس از درج سطری در جدولی در mysql ، در جدولی دیگر سطری دیگر درج شود.

همانطور که ملاحظه می شود در شکل زیر نام تریگر خود را trg_insert قرار دادیم. پس از آن مشخص کردیم پس از عمل درج (AFTER INSERT) بر روی جدول itdn_users برای هر سطر(FOR EACH ROW) در جدول tbl_log گزارش مربوطه درج شود.

نکته : حتما برای شما این سوال پیش آمده که چرا قبل از تریگر از دستور DELIMITTER $$ استفاده شده است . علت استفاده به این دلیل است که به MYSQL بگوییم پایان تریگر ما با $$ می باشد و با سمی کولن نیست. شما می توانید به جای $$ از // و … استفاده نمائید.

 

برای حذف یک تریگر در mysql می توانید از دستور drop trigger trg_insert; استفاده نمائید.

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

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