Triggers হল ডাটাবেসের বিশেষ ধরনের অবজারভার যেগুলি স্বয়ংক্রিয়ভাবে নির্দিষ্ট ইভেন্ট (যেমন ইনসার্ট, আপডেট, ডিলিট) ঘটলে কার্যকর হয়। Triggers সাধারণত ডাটাবেস টেবিলের উপর নির্দিষ্ট অপারেশন সম্পন্ন হলে স্বয়ংক্রিয়ভাবে কিছু কাজ সম্পাদন করার জন্য ব্যবহৃত হয়।
SQLite-এ একটি Trigger তৈরি করা হয় যাতে এটি স্বয়ংক্রিয়ভাবে কোনো ডাটাবেস অপারেশন (যেমন ডাটা ইনসার্ট, আপডেট বা ডিলিট) ঘটলে নির্দিষ্ট কাজ করতে পারে। Triggers একটি SQL কুয়েরি বা কমান্ড হিসেবে লেখা হয় এবং এটি সাধারণত অটোমেটিকাল কার্যক্রম পরিচালনা করে।
Trigger তৈরি করা
SQLite-এ Trigger তৈরি করার জন্য CREATE TRIGGER কুয়েরি ব্যবহার করা হয়। Trigger-এর জন্য বিভিন্ন অংশ থাকে:
- Trigger Name: Trigger-এর নাম।
- Trigger Timing: Trigger কবে কার্যকর হবে (BEFORE বা AFTER)।
- Trigger Event: Triggerটি কোন ইভেন্টের পর কার্যকর হবে (INSERT, UPDATE, DELETE)।
- Trigger Body: Trigger কী কাজ করবে তা নির্দেশ করা।
Trigger তৈরি করার সাধারণ সিনট্যাক্স:
CREATE TRIGGER trigger_name
trigger_timing trigger_event
ON table_name
FOR EACH ROW
BEGIN
-- Trigger body (SQL statements to execute)
END;
- trigger_timing: BEFORE বা AFTER (এটা নির্দেশ করে যে Triggerটি ইভেন্টের আগে (BEFORE) বা পরে (AFTER) কার্যকর হবে)।
- trigger_event: INSERT, UPDATE বা DELETE ইভেন্ট (যেটি ঘটলে Trigger কার্যকর হবে)।
উদাহরণ ১: INSERT Trigger
ধরা যাক, একটি employees টেবিল আছে, যেখানে কর্মীদের তথ্য রাখা হয় এবং একটি audit_log টেবিল আছে, যা সব INSERT অপারেশনের লগ রাখে। আমরা এমন একটি Trigger তৈরি করতে পারি যা যখন কোনো নতুন কর্মী employees টেবিলে যোগ হবে, তখন স্বয়ংক্রিয়ভাবে audit_log টেবিলে একটি রেকর্ড ইনসার্ট করবে।
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
salary INTEGER
);
CREATE TABLE audit_log (
id INTEGER PRIMARY KEY,
action TEXT,
action_time TEXT
);
CREATE TRIGGER log_insert
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (action, action_time)
VALUES ('INSERT', datetime('now'));
END;
ব্যাখ্যা:
- এই Triggerটি employees টেবিলে নতুন রেকর্ড ইনসার্ট করার পরে audit_log টেবিলে একটি ইনসার্ট লগ যুক্ত করবে, যেখানে action হবে 'INSERT' এবং action_time হবে বর্তমান সময় (যেহেতু আমরা
datetime('now')ব্যবহার করেছি)।
উদাহরণ ২: UPDATE Trigger
ধরা যাক, আমাদের employees টেবিলের একজন কর্মীর বেতন আপডেট করতে হবে, তবে আমরা চাই যে প্রতিবার কোনো কর্মীর বেতন পরিবর্তন হলে, সেই কর্মীর আগের বেতন salary_history টেবিলে রেকর্ড হিসেবে সংরক্ষণ করা হোক। এই কাজটি করার জন্য আমরা একটি Trigger তৈরি করতে পারি।
CREATE TABLE salary_history (
id INTEGER PRIMARY KEY,
employee_id INTEGER,
old_salary INTEGER,
new_salary INTEGER,
change_date TEXT
);
CREATE TRIGGER log_salary_update
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_history (employee_id, old_salary, new_salary, change_date)
VALUES (OLD.id, OLD.salary, NEW.salary, datetime('now'));
END;
ব্যাখ্যা:
- এই Triggerটি employees টেবিলে salary কলামে কোনো পরিবর্তন হলে কার্যকর হবে।
OLD.salaryদিয়ে পুরোনো বেতন এবংNEW.salaryদিয়ে নতুন বেতন রেকর্ড হবে salary_history টেবিলে।OLD.idএর মাধ্যমে কর্মীর আইডি এবংdatetime('now')দ্বারা বর্তমান সময় সংরক্ষণ করা হবে।
উদাহরণ ৩: DELETE Trigger
ধরা যাক, যদি কোনো কর্মী employees টেবিল থেকে মুছে যায়, তবে আমরা তার ডিলিট হওয়া তথ্য deleted_employees টেবিলে সংরক্ষণ করতে চাই। আমরা একটি Trigger তৈরি করব যাতে DELETE অপারেশনের সময় এই তথ্য সংরক্ষিত হয়।
CREATE TABLE deleted_employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
salary INTEGER,
deleted_at TEXT
);
CREATE TRIGGER log_employee_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
INSERT INTO deleted_employees (id, name, department, salary, deleted_at)
VALUES (OLD.id, OLD.name, OLD.department, OLD.salary, datetime('now'));
END;
ব্যাখ্যা:
- এই Triggerটি employees টেবিল থেকে কোনো কর্মী ডিলিট হলে, সেই কর্মীর তথ্য deleted_employees টেবিলে যোগ করবে।
OLD.id,OLD.nameইত্যাদি ব্যবহার করা হয়েছে যেহেতু ডিলিট হওয়া রেকর্ডের আগের মান প্রয়োজন।
Trigger এর সুবিধা
- অটোমেশন: Trigger ব্যবহারের মাধ্যমে আপনি অনেক কাজ অটোমেটিক্যালি করতে পারেন, যেমন ডাটা ইনসার্ট বা আপডেট হলে লগ রেকর্ড করা, ডাটা মুছে ফেলার আগে ব্যাকআপ রাখা ইত্যাদি।
- ডেটা এক্সিকিউশন নিয়ন্ত্রণ: Trigger দিয়ে আপনি নির্দিষ্ট ইভেন্টের আগে বা পরে কিছু কাজ চালাতে পারেন, যেমন ডাটা আপডেটের আগে কিছু ভ্যালিডেশন করা।
- ডাটাবেস নিরাপত্তা: Trigger ব্যবহার করে আপনি ডাটাবেসের নিরাপত্তা বাড়াতে পারেন, যেমন একটি টেবিল থেকে ডাটা মুছে ফেলার আগে যাচাই করা বা ডাটা পরিবর্তন হওয়ার আগে লগ রাখা।
সারাংশ
Triggers একটি শক্তিশালী ফিচার যা ডাটাবেসে স্বয়ংক্রিয় কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। আপনি INSERT, UPDATE, DELETE ইভেন্টে Trigger ব্যবহার করে ডাটাবেসের উপর নির্দিষ্ট কাজ করতে পারেন। Triggers ডাটাবেসের অটোমেশন ও কার্যকারিতা বৃদ্ধি করতে সাহায্য করে এবং ডেটা এক্সিকিউশনে আরো নিয়ন্ত্রণ প্রদান করে।
Read more