تریگر رویه ای است که هنگام وقوع یک رویداد پایگاه داده اجرا می شود.
برای ایجاد یک ماشه از دستور CREATE TRIGGER استفاده کنید.
تریگرها می توانند به اجرای داده ها و یکپارچگی ارجاعی در پایگاه داده کمک کنند.
مثال
این تریگر مقدار سفارش را پس از تغییر ردیف آیتم سفارش مجدداً محاسبه می کند
پس از ایجاد، این ماشه به طور خودکار پس از به روزرسانی OrderItem اجرا می شود.
استفاده از Triggers
تریگرها رویه هایی هستند که در صورت وقوع یک رویداد پایگاه داده به طور خودکار اجرا می شوند.
این رویدادها شامل عملیات INSERT، UPDATE و DELETE است.
یک تریگر می تواند بعد از عمل یا به جای آن اجرا شود.
INSEAD O INSERT، UPDATE و DELETE را لغو می کند که باعث ایجاد آن شده است.
نحو
نحو برای ایجاد یک ماشه.
نحو برای تغییر یک ماشه.
نحو برای حذف یک ماشه.
نمونه های بیشتر
ایجاد ماشه
| سفارش |
| Id |
| شماره سفارش |
| شناسه محصول |
| قیمت واحد |
| تعداد |
ALTER TRIGGER
| سفارش |
| Id |
| شماره سفارش |
| شناسه محصول |
| قیمت واحد |
| تعداد |
DROP TRIGGER
| سفارش |
| Id |
| شماره سفارش |
| شناسه محصول |
| قیمت واحد |
| تعداد |
تغییر نام TRIGGER
| سفارش |
| Id |
| شماره سفارش |
| شناسه محصول |
| قیمت واحد |
| تعداد |
تغییر نام یک ماشه در SQL Server در دسترس نیست. برای تغییر نام، ماشه را رها کنید و سپس آن را با یک نام جدید دوباره ایجاد کنید.
انواع محرک ها
محرک ها به 3 دسته تقسیم می شوند:
| ماشه | شرح |
| DML | به جستارهای DML (زبان دستکاری داده ها) مانند، INSERT، UPDATE و DELETE واکنش نشان دهید. |
| DDL | به جستارهای DDL (زبان تعریف داده ها) مانند CREATE، ALTER و DROP واکنش نشان دهید. |
| ورود | هنگامی که یک رویداد LOGON شناسایی می شود، فعال می شود |
DML محرک های ارائه شده در بالا هستند. محرک های DDL و Logon در ادامه مورد بحث قرار می گیرند.
محرک های DDL
تریگرهای DDL به تغییرات ایجاد شده در طرح پایگاه داده پاسخ می دهند.
رویدادها شامل اقدامات CREATE، ALTER، DROP، GRANT، DENY، ReEVOKE هستند.
یک کاربرد رایج، جلوگیری از تغییرات خاصی در مدل داده است.
کاربرد دیگر این است که تغییرات مدل داده را ممیزی کنید و آنها را در یک جدول گزارش ثبت کنید.
دستور DDL Trigger Syntax
سینتکس برای ایجاد یک تریگر DDL.
به معنای واقعی کلمه ده ها رویداد_types و رویداد_گروه وجود دارد.
نمونه هایی از event_type عبارتند از: CREATE_TABLE یا DROP_INDEX.
نمونه هایی از رویداد_گروه عبارتند از: DDL_TABLE_EVENTS یا DDL_DATABASE_SECURITY_EVENTS.
نمونه های ماشه DDL
ایجاد ماشه DDL
مشکل: همه تغییرات فهرست پایگاه داده را در یک جدول گزارش ثبت کنید.
این ماشه فرض می کند که یک جدول گزارش به نام IndexLog ایجاد شده است.
تابع ()EVENTDATA اطلاعات مربوط به رویداد پایگاه داده را برمی گرداند.
هر زمان که یک شاخص تغییر کند، این ماشه یک ورودی جدید به جدول گزارش اضافه می کند.
ماشه DDL را با ROLLBACK ایجاد کنید
مشکل: از ایجاد تغییرات در طرح جدول توسط کاربران جلوگیری کنید. هر تلاشی را برگردانید.
این ماشه به تمام تغییرات طرح جدول پاسخ می دهد.
یک پیام خطا نمایش داده می شود و تغییر جدول برگشت داده می شود (لغو می شود).
محرک های ورود
هنگامی که یک اتصال پایگاه داده جدید برقرار می شود، یک ماشه ورود فعال می شود.
موارد استفاده رایج عبارتند از:
- حسابرسی فعالیت ورود به سیستم
- محدود کردن تعداد جلسات ورود همزمان
- محدود کردن تعداد کل اتصالات
- محدود کردن ورود با نام میزبان یا آدرس IP
دستور ورود به سیستم
سینتکس برای ایجاد یک تریگر Logon.
موارد استفاده ماشه
اینها چند مورد استفاده هستند که محرک ها می توانند بسیار مفید باشند:
یکپارچگی مرجع را در پایگاه داده اعمال کنید
ثبت رویداد و ممیزی
مقادیر ستون مشتق شده یا محاسبه شده را فوراً ایجاد کنید
جداول را به صورت همزمان تکرار کنید
مجوزهای امنیتی را اعمال کنید
جلوگیری از معاملات نامعتبر
ملاحظات ماشه
مواردی که باید قبل از استفاده از محرک ها در نظر بگیرید.
محرک ها می توانند بر عملکرد تأثیر منفی بگذارند.
اشکال زدایی تریگرها دشوار است و می تواند باعث شود که باگ ها به سختی حل شوند.
اشکال زدایی تریگرهای تودرتو و بازگشتی بسیار سخت است.
محرک ها به راحتی فراموش می شوند و توسعه دهندگان را مجبور می کند سر خود را بخارانند.
به عنوان یک قاعده کلی، بهتر است از محرک ها کم استفاده کنید.
همه محرک ها را فهرست کنید
این پرس و جو همه محرک ها را در پایگاه داده فهرست می کند.
محرک ها به راحتی فراموش می شوند، بنابراین فهرستی از محرک ها می تواند هنگام تلاش برای شناسایی یک باگ مرموز در پایگاه داده مفید باشد.
بازار رمزارزها...
ما را در سایت بازار رمزارزها دنبال می کنید
برچسب : نویسنده : محمود کیانوش بازدید : 40 تاريخ : چهارشنبه 16 فروردين 1402 ساعت: 21:20