Trigger در پایگاه داده چیست؟

**تریگر (Trigger)** در پایگاه داده یک شیء برنامه‌نویسی است که به طور خودکار در پاسخ به رویدادهای خاص (مانند درج، به‌روزرسانی یا حذف داده‌ها) اجرا می‌شود. تریگرها برای اعمال قوانین کسب‌وکار، اعتبارسنجی داده‌ها، یا انجام عملیات خاص پس از تغییرات در داده‌ها استفاده می‌شوند.

### **مفاهیم کلیدی تریگرها**

1. **رویداد (Event)**:
– تریگرها در پاسخ به رویدادهای خاصی اجرا می‌شوند. این رویدادها معمولاً عبارتند از:
– **INSERT**: هنگام درج داده‌های جدید.
– **UPDATE**: هنگام به‌روزرسانی داده‌های موجود.
– **DELETE**: هنگام حذف داده‌ها.

2. **زمان اجرا (Timing)**:
– تریگرها می‌توانند در دو زمان اجرا شوند:
– **BEFORE**: قبل از اجرای عملیات (مثلاً قبل از درج یا به‌روزرسانی).
– **AFTER**: بعد از اجرای عملیات (مثلاً بعد از درج یا به‌روزرسانی).

3. **شرط (Condition)**:
– تریگرها می‌توانند دارای شرط باشند، یعنی فقط در صورت برآورده شدن شرایط خاص اجرا شوند.

4. **عملیات (Action)**:
– تریگرها می‌توانند یک یا چند دستور SQL را اجرا کنند. این دستورات می‌توانند شامل درج، به‌روزرسانی، حذف یا فراخوانی توابع ذخیره‌شده باشند.

### **انواع تریگرها**

1. **تریگرهای سطح ردیف (Row-Level Triggers)**:
– برای هر سطر تغییر یافته اجرا می‌شوند.
– مثال: اگر ۱۰ سطر در یک عملیات به‌روزرسانی شوند، تریگر ۱۰ بار اجرا می‌شود.

2. **تریگرهای سطح عبارت (Statement-Level Triggers)**:
– یک بار برای هر عملیات اجرا می‌شوند، صرف‌نظر از تعداد سطرهای تغییر یافته.
– مثال: اگر ۱۰ سطر در یک عملیات به‌روزرسانی شوند، تریگر فقط یک بار اجرا می‌شود.

### **ساختار کلی تریگر**

CREATE TRIGGER trigger_name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_name
[FOR EACH ROW] -- برای تریگرهای سطح ردیف
[WHEN (condition)] -- شرط اختیاری
BEGIN
-- دستورات SQL
END;

### **مثال‌های کاربردی تریگرها**

#### ۱. **اعتبارسنجی داده‌ها**
– مثال: قبل از درج داده‌های جدید در جدول `employees`، بررسی کنید که حقوق کارمند بیشتر از ۰ باشد.

“`sql
CREATE TRIGGER validate_salary
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF NEW.salary <= 0 THEN
SIGNAL SQLSTATE ‘45000’ SET MESSAGE_TEXT = ‘Salary must be greater than 0’;
END IF;
END;
“`

#### ۲. **ثبت تغییرات در جدول تاریخچه**
– مثال: بعد از به‌روزرسانی داده‌ها در جدول `orders`، تغییرات را در جدول `order_history` ثبت کنید.

“`sql
CREATE TRIGGER log_order_changes
AFTER UPDATE ON orders
FOR EACH ROW
BEGIN
INSERT INTO order_history (order_id, old_status, new_status, change_date)
VALUES (OLD.order_id, OLD.status, NEW.status, NOW());
END;
“`

#### ۳. **محاسبه خودکار مقادیر**
– مثال: بعد از درج داده‌های جدید در جدول `sales`، مقدار کل فروش را در جدول `sales_summary` به‌روزرسانی کنید.

“`sql
CREATE TRIGGER update_sales_summary
AFTER INSERT ON sales
FOR EACH ROW
BEGIN
UPDATE sales_summary
SET total_sales = total_sales + NEW.amount
WHERE product_id = NEW.product_id;
END;
“`

### **مزایای تریگرها**
1. **اتوماسیون**: انجام خودکار عملیات بدون نیاز به دخالت کاربر.
2. **اعتبارسنجی داده‌ها**: اطمینان از صحت و یکپارچگی داده‌ها.
3. **ثبت تغییرات**: ردیابی تغییرات در داده‌ها برای اهداف حسابرسی.
4. **اجرای قوانین کسب‌وکار**: اعمال قوانین پیچیده در سطح پایگاه داده.

### **معایب تریگرها**
1. **پیچیدگی**: تریگرها می‌توانند منطق پایگاه داده را پیچیده کنند.
2. **اشکال‌زدایی سخت**: خطاهای تریگرها ممکن است تشخیص داده نشوند.
3. **تأثیر بر عملکرد**: تریگرها می‌توانند بر عملکرد پایگاه داده تأثیر بگذارند، به‌ویژه اگر تعداد زیادی تریگر وجود داشته باشد.

### **نکات مهم در استفاده از تریگرها**
1. از تریگرها فقط در موارد ضروری استفاده کنید.
2. تریگرها را ساده و کارآمد نگه دارید.
3. از تریگرهای تو در تو (Nested Triggers) اجتناب کنید، زیرا می‌توانند باعث مشکلات عملکردی شوند.
4. قبل از ایجاد تریگر، تأثیر آن بر عملکرد پایگاه داده را بررسی کنید.

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد.