Triggers হল বিশেষ ধরনের স্টোরড প্রসিডিউর যা স্বয়ংক্রিয়ভাবে কোনও নির্দিষ্ট ডেটাবেস অপারেশন (যেমন INSERT, UPDATE, বা DELETE) ঘটলে কার্যকর হয়। Triggers সাধারণত ডেটাবেসে ডেটা পরিবর্তনের প্রক্রিয়ায় অটোমেশন ও ইন্টিগ্রিটি বজায় রাখার জন্য ব্যবহৃত হয়। এটি একটি event-driven প্রোগ্রামিং কৌশল, যেখানে এক বা একাধিক শর্ত পূর্ণ হলে trigger সক্রিয় হয়।
Trigger এর ধরন
- DML Triggers (Data Manipulation Language Triggers):
- INSERT Trigger: একটি নতুন রেকর্ড টেবিলে যোগ হলে trigger কাজ করে।
- UPDATE Trigger: একটি রেকর্ডের মান পরিবর্তিত হলে trigger কাজ করে।
- DELETE Trigger: একটি রেকর্ড ডিলিট হলে trigger কাজ করে।
- INSTEAD OF Triggers:
- INSTEAD OF Triggers হল এমন triggers যা কোনো ডেটাবেস অপারেশন সম্পাদনের পরিবর্তে নির্দিষ্ট কাজ বা স্টেটমেন্ট কার্যকর করে।
- DDL Triggers (Data Definition Language Triggers):
- এগুলি ডেটাবেস স্কিমা পরিবর্তন বা ডেটাবেসের অবকাঠামোর জন্য ব্যবহৃত হয় (যেমন
CREATE,ALTER,DROPঅপারেশন)।
- এগুলি ডেটাবেস স্কিমা পরিবর্তন বা ডেটাবেসের অবকাঠামোর জন্য ব্যবহৃত হয় (যেমন
- LOGON/LOGOFF Triggers:
- এটি ব্যবহারকারীর লগিন বা লগআউট হওয়ার সময় কোনো প্রক্রিয়া চালানোর জন্য ব্যবহৃত হয়।
Trigger এর সিনট্যাক্স:
CREATE TRIGGER trigger_name
ON table_name
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
-- Triggered code
END;
- trigger_name: Trigger এর নাম।
- table_name: Trigger টি যে টেবিলের ওপর প্রয়োগ হবে তার নাম।
- AFTER INSERT, UPDATE, DELETE: কোন ডেটাবেস অপারেশনের পরে trigger কাজ করবে।
- BEGIN...END: Trigger এর কার্যকরী অংশ যেখানে আপনার কোড থাকবে।
Trigger এর উদাহরণ এবং ব্যবহার:
১. INSERT Trigger উদাহরণ
ধরা যাক, একটি Sales টেবিল রয়েছে যেখানে SaleAmount কলামে বিক্রয়ের পরিমাণ থাকে এবং আপনি চান যে বিক্রয়ের পরিমাণ ইনসার্ট হলে AuditSales টেবিলে একটি রেকর্ড তৈরি হোক, যেখানে বিক্রয়ের পরিমাণ, তারিখ এবং কর্মচারীর আইডি থাকবে।
CREATE TRIGGER trg_AuditSaleInsert
ON Sales
AFTER INSERT
AS
BEGIN
DECLARE @SaleAmount DECIMAL(10, 2), @EmployeeID INT, @SaleDate DATETIME;
-- Inserted রেকর্ড থেকে ডেটা নিয়ে আসা
SELECT @SaleAmount = SaleAmount, @EmployeeID = EmployeeID, @SaleDate = SaleDate
FROM INSERTED;
-- AuditSales টেবিলে রেকর্ড ইনসার্ট করা
INSERT INTO AuditSales (SaleAmount, EmployeeID, SaleDate)
VALUES (@SaleAmount, @EmployeeID, @SaleDate);
END;
এখানে:
- AFTER INSERT: যখন নতুন রেকর্ড Sales টেবিলে ইনসার্ট হবে, তখন এই trigger কার্যকর হবে।
- INSERTED: এটি একটি বিশেষ টেবিল যা
INSERT,UPDATEঅপারেশনের পরবর্তী রেকর্ড ধারণ করে।
২. UPDATE Trigger উদাহরণ
ধরা যাক, একটি Employees টেবিল রয়েছে এবং আপনি চান যে কর্মচারীর Salary পরিবর্তিত হলে একটি SalaryHistory টেবিলে পুরনো এবং নতুন স্যালারি মানের সাথে এক্সট্রা তথ্য (যেমন পরিবর্তনের তারিখ) সংরক্ষিত হোক।
CREATE TRIGGER trg_UpdateSalary
ON Employees
AFTER UPDATE
AS
BEGIN
DECLARE @OldSalary DECIMAL(10, 2), @NewSalary DECIMAL(10, 2), @EmployeeID INT, @ChangeDate DATETIME;
-- Updated রেকর্ড থেকে পুরনো এবং নতুন স্যালারি পাওয়া
SELECT @OldSalary = DELETED.Salary, @NewSalary = INSERTED.Salary, @EmployeeID = INSERTED.EmployeeID
FROM INSERTED
INNER JOIN DELETED ON INSERTED.EmployeeID = DELETED.EmployeeID;
-- SalaryHistory টেবিলে রেকর্ড ইনসার্ট করা
INSERT INTO SalaryHistory (EmployeeID, OldSalary, NewSalary, ChangeDate)
VALUES (@EmployeeID, @OldSalary, @NewSalary, GETDATE());
END;
এখানে:
- AFTER UPDATE: যখন Salary পরিবর্তিত হবে, trigger এটি সনাক্ত করে এবং SalaryHistory টেবিলে পুরনো এবং নতুন স্যালারি সংরক্ষণ করবে।
৩. DELETE Trigger উদাহরণ
ধরা যাক, আপনি চান যে Employees টেবিল থেকে একটি রেকর্ড ডিলিট হলে তা AuditLog টেবিলে লোগ করা হোক, যাতে পরে ট্র্যাক করা যায় কোন রেকর্ডটি মুছে ফেলা হয়েছে।
CREATE TRIGGER trg_DeleteEmployee
ON Employees
AFTER DELETE
AS
BEGIN
DECLARE @EmployeeID INT, @EmployeeName VARCHAR(100);
-- Deleted রেকর্ড থেকে ডেটা নেয়া
SELECT @EmployeeID = EmployeeID, @EmployeeName = FirstName + ' ' + LastName
FROM DELETED;
-- AuditLog টেবিলে রেকর্ড ইনসার্ট করা
INSERT INTO AuditLog (EmployeeID, EmployeeName, Action, ActionDate)
VALUES (@EmployeeID, @EmployeeName, 'Deleted', GETDATE());
END;
এখানে:
- AFTER DELETE: যখন Employees টেবিল থেকে কোনো রেকর্ড মুছে ফেলা হবে, trigger এটি সনাক্ত করে এবং AuditLog টেবিলে লোগ করবে।
Trigger ব্যবহার করার প্রয়োজনীয়তা:
- ডেটাবেস ইন্টিগ্রিটি:
- Trigger ব্যবহার করে ডেটাবেসের ইন্টিগ্রিটি বজায় রাখা যায়, যেমন ডেটার সঠিকতা এবং মান যাচাই করা।
- অটোমেটিক ডেটা ম্যানিপুলেশন:
- Triggers ডেটাবেসে যেকোনো পরিবর্তনের পর অটোমেটিকভাবে ডেটা ম্যানিপুলেট করতে সাহায্য করে, যেমন লগ বা অডিট রেকর্ড তৈরি করা, ডেটা আপডেট করা ইত্যাদি।
- Audit Trails:
- Trigger ব্যবহার করে আপনি ডেটাবেসের পরিবর্তনগুলি ট্র্যাক করতে পারেন। যখন কোনো রেকর্ড মুছে যায় বা পরিবর্তিত হয়, তখন সেই পরিবর্তন বা মুছা হওয়ার ঘটনা অডিট টেবিল বা লগ টেবিলে রেকর্ড করা হয়।
- Complex Business Logic:
- Trigger ব্যবহার করে আপনি ডেটাবেসের মধ্যে জটিল ব্যবসায়িক লজিক প্রয়োগ করতে পারেন, যেমন ডেটাবেসের একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করা বা তাদের মধ্যে সিঙ্ক্রোনাইজেশন রাখা।
CURSOR এর তুলনায় Trigger এর সুবিধা:
- Performance: Triggers সাধারণত খুব দ্রুত কাজ করে কারণ তারা SET-BASED প্রক্রিয়া ব্যবহার করে এবং CURSOR এর তুলনায় কম রিসোর্স নেয়।
- Automatic Execution: Triggers স্বয়ংক্রিয়ভাবে কাজ করে, তাই আপনাকে ম্যানুয়ালি কোড লেখার প্রয়োজন নেই।
সারাংশ
Triggers T-SQL-এ স্বয়ংক্রিয়ভাবে নির্দিষ্ট ডেটাবেস অপারেশন (যেমন INSERT, UPDATE, DELETE) ঘটলে কার্যকরী হয়। তারা ডেটাবেসের ইন্টিগ্রিটি বজায় রাখে, জটিল ব্যবসায়িক লজিক কার্যকর করে, এবং অডিট ট্রেইল তৈরি করতে সাহায্য করে। DML Triggers ডেটা ম্যানিপুলেশন (INSERT, UPDATE, DELETE) অপারেশন পরিচালনা করে, INSTEAD OF Triggers এবং DDL Triggers স্কিমা পরিবর্তন ও ডেটাবেস কাঠামো পরিবর্তনে ব্যবহৃত হয়।
Read more