Trigger (ট্রিগার) হলো একটি বিশেষ ধরনের SQL অবজেক্ট, যা নির্দিষ্ট ডেটাবেস অপারেশনের (যেমন, INSERT, UPDATE, DELETE) ঘটনার প্রতিক্রিয়া হিসাবে স্বয়ংক্রিয়ভাবে চালিত হয়। এটি মূলত ডেটাবেসে কোনো পরিবর্তন ঘটলে সেই পরিবর্তনের উপর ভিত্তি করে পূর্বনির্ধারিত কিছু অ্যাকশন সম্পাদন করতে ব্যবহৃত হয়।
ট্রিগার একটি রিয়েক্টিভ (reactive) অবজেক্ট, অর্থাৎ এটি কার্যকর হয় যখন নির্দিষ্ট কোনো ডেটাবেস অপারেশন ঘটানো হয়। SQL ট্রিগার ডেটাবেসের ইন্টিগ্রিটি রক্ষা, লগিং, অডিটিং এবং অন্য অনেক কাজের জন্য ব্যবহৃত হতে পারে।
Trigger এর ধরন
ট্রিগারের প্রধানত তিনটি ধরন থাকে, যা ডেটাবেসে অপারেশনের প্রকারের উপর নির্ভর করে কার্যকর হয়:
- BEFORE Trigger
- AFTER Trigger
- INSTEAD OF Trigger
1. BEFORE Trigger
BEFORE Trigger হল একটি ট্রিগার যা কোনো ডেটাবেস অপারেশন সম্পাদিত হওয়ার আগে চলে। এটি সাধারণত ডেটার সঠিকতা নিশ্চিত করার জন্য ব্যবহার করা হয়, যেমন ডেটা ভ্যালিডেশন বা কোনো পরিবর্তন অগ্রসর হওয়ার আগে বিশেষ শর্ত যাচাই করা।
উদাহরণ:
ধরা যাক, আমাদের একটি Employees টেবিল রয়েছে এবং আমরা চাই যে, যখন একজন কর্মচারী (employee) বেতন (salary) আপডেট করবেন, তখন সেটা ৫০০০০ টাকার বেশি না হওয়া পর্যন্ত কিছু পরিবর্তন করতে হবে।
CREATE TRIGGER check_salary_before_update
BEFORE UPDATE ON Employees
FOR EACH ROW
BEGIN
IF NEW.salary > 50000 THEN
SET NEW.salary = 50000;
END IF;
END;
এই BEFORE UPDATE ট্রিগারটি salary ফিল্ডের মান আপডেট করার আগে চলে এবং এটি বেতন ৫০,০০০ টাকার বেশি হলে, সেটি ৫০,০০০ টাকায় সীমাবদ্ধ করে।
2. AFTER Trigger
AFTER Trigger হল একটি ট্রিগার যা কোনো ডেটাবেস অপারেশন (যেমন INSERT, UPDATE, DELETE) সফলভাবে সম্পন্ন হওয়ার পরে চলে। এটি সাধারণত ডেটাবেসে পরিবর্তন হওয়ার পর কিছু পরবর্তী অ্যাকশন (যেমন লগিং বা অডিটিং) বা অন্য কোনো অবজেক্টে পরিবর্তন আনতে ব্যবহৃত হয়।
উদাহরণ:
ধরা যাক, আমরা একটি Customers টেবিলের ডেটা ডিলিট করার পর একটি লগ টেবিলে ডিলিট হওয়া রেকর্ডের তথ্য রেকর্ড করতে চাই।
CREATE TRIGGER log_customer_delete
AFTER DELETE ON Customers
FOR EACH ROW
BEGIN
INSERT INTO deletion_log (customer_id, deleted_at)
VALUES (OLD.customer_id, NOW());
END;
এই AFTER DELETE ট্রিগারটি Customers টেবিল থেকে কোনো রেকর্ড ডিলিট করার পরে একটি লগ টেবিলে ঐ রেকর্ডটির তথ্য যুক্ত করবে।
3. INSTEAD OF Trigger
INSTEAD OF Trigger হল একটি ট্রিগার যা ডেটাবেসে কোনো অপারেশন (যেমন INSERT, UPDATE, DELETE) চালানোর পরিবর্তে একটি কাস্টম অপারেশন বা অন্য কোনো পরিবর্তন সম্পাদন করে। এটি সাধারণত দৃশ্যমান (views) বা ভিউ (views) এর ক্ষেত্রে ব্যবহার করা হয়, যেখানে ডেটা সোজাসুজি টেবিলে ইন্সার্ট বা আপডেট করা সম্ভব হয় না।
উদাহরণ:
ধরা যাক, আমাদের একটি view রয়েছে, যা দুটি টেবিলের ডেটা একত্রিত করে। আমরা চাই যে, যখন এই ভিউতে INSERT করা হবে, তখন তা মূল টেবিলগুলোতে সঠিকভাবে যুক্ত হোক।
CREATE TRIGGER instead_of_insert
INSTEAD OF INSERT ON Employee_View
FOR EACH ROW
BEGIN
INSERT INTO Employees (name, position)
VALUES (NEW.name, NEW.position);
END;
এই INSTEAD OF INSERT ট্রিগারটি Employee_View ভিউতে কোনো INSERT কোয়েরি চালানোর পরিবর্তে, সেই ডেটা মূল Employees টেবিলে ইন্সার্ট করবে।
Trigger এর কাজ করার পদ্ধতি
ট্রিগারটি একটি প্রতিক্রিয়া হিসেবে কাজ করে, যখন কোনো ডেটাবেস অপারেশন (INSERT, UPDATE, DELETE) ঘটে। সাধারণত, এটি নির্দিষ্ট একটি টেবিলের উপর বা একাধিক টেবিলের মধ্যে কাজ করে। ট্রিগারটি তখন কার্যকর হয় যখন পূর্বনির্ধারিত শর্তগুলি পূর্ণ হয় এবং কোয়েরি সেই শর্ত অনুসারে ডেটাবেসে অপারেশন সম্পাদন করে।
Trigger এর Execution Flow:
- Event: কোনো ডেটাবেস অপারেশন (INSERT, UPDATE, DELETE) ঘটে।
- Condition: ট্রিগারটির শর্ত চেক করা হয়। উদাহরণস্বরূপ, BEFORE ট্রিগার চেক করবে যে, ডেটার মান বৈধ কিনা।
- Action: ট্রিগারটি নির্দিষ্ট অ্যাকশন সম্পাদন করে, যেমন ডেটা পরিবর্তন, লগ করা বা অন্য কোনো অ্যাকশন।
Trigger এর সুবিধা এবং ব্যবহার
- ডেটাবেস ইন্টিগ্রিটি রক্ষা: ট্রিগার দিয়ে ডেটার সঠিকতা যাচাই করা যায়, যেমন কোন রেকর্ড আপডেট বা ডিলিট করার আগে কিছু শর্ত পূর্ণ হতে হবে।
- অডিটিং এবং লগিং: টেবিল থেকে ডেটা ডিলিট বা আপডেট হওয়ার পরে লগিং করা।
- স্বয়ংক্রিয় কার্যকলাপ: ডেটাবেসের যে কোনো পরিবর্তনের সাথে সম্পর্কিত স্বয়ংক্রিয় কার্যক্রম চালানো যায়, যেমন ডেটা রেকর্ড করা বা সংশ্লিষ্ট টেবিল আপডেট করা।
- ভিউ-এর জন্য: INSTEAD OF Trigger ব্যবহার করে ভিউতে ইনপুট/আপডেট/ডিলিটের পরিবর্তে সঠিক টেবিলে ডেটা পুশ করা যায়।
Trigger এর সীমাবদ্ধতা
- Performance Impact: ট্রিগার ব্যবহার করার কারণে ডেটাবেস অপারেশনের সময় বৃদ্ধি পেতে পারে, বিশেষ করে যদি একাধিক ট্রিগার একে অপরকে ট্রিগার করে বা কমপ্লেক্স কাজ সম্পাদন করে।
- Debugging Difficulties: ট্রিগারটি অদৃশ্যভাবে কার্যকর হয়, যা ডিবাগিংকে কিছুটা কঠিন করে তুলতে পারে, বিশেষত যখন এটি বিপরীত আচরণ প্রদর্শন করে।
এভাবে, Trigger SQL ডেটাবেসে একটি গুরুত্বপূর্ণ সরঞ্জাম হিসেবে কাজ করে, যা ডেটাবেসের বিভিন্ন ধরণের প্রক্রিয়া স্বয়ংক্রিয়ভাবে পরিচালনা এবং সঠিকভাবে কার্যকর করার জন্য ব্যবহৃত হয়।
Read more