Triggers (ট্রিগার) হল ডেটাবেসের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা নির্দিষ্ট ইভেন্ট বা কার্যক্রমের সময় স্বয়ংক্রিয়ভাবে কার্যকর হয়। অর্থাৎ, ট্রিগার একটি বিশেষ ধরনের সংরক্ষিত প্রক্রিয়া যা ডেটাবেসের উপর কোন নির্দিষ্ট পরিবর্তন (যেমন, INSERT, UPDATE, বা DELETE) ঘটলে তা স্বয়ংক্রিয়ভাবে কার্যকর হয়। মারিয়া ডিবি (MariaDB) তে ট্রিগার ব্যবহারের মাধ্যমে আপনি ডেটাবেসের বিভিন্ন ক্রিয়াকলাপের ওপর নিয়ন্ত্রণ রাখতে পারেন এবং কিছু স্বয়ংক্রিয় কাজ পরিচালনা করতে পারেন।
Trigger কী?
Trigger একটি ধরনের stored procedure (সংরক্ষিত প্রক্রিয়া), যা ডেটাবেসের উপর নির্দিষ্ট ক্রিয়াকলাপ বা ইভেন্ট ঘটলে স্বয়ংক্রিয়ভাবে কার্যকর হয়। ট্রিগারটি সাধারণত INSERT, UPDATE, বা DELETE ইভেন্টের সাথে সম্পর্কিত থাকে।
ট্রিগার কীভাবে কাজ করে?
- ট্রিগার নির্দিষ্ট একটি টেবিলের ওপর নির্দিষ্ট ইভেন্ট (যেমন, ডেটা ইন্সার্ট করা, মডিফাই করা বা ডিলিট করা) ঘটলেই এটি স্বয়ংক্রিয়ভাবে চালু হয়।
- এটি সাধারণত ডেটাবেসের এক বা একাধিক রেকর্ডে পরিবর্তন করার জন্য ব্যবহৃত হয়।
- ট্রিগারটি প্রক্রিয়া শুরু করার আগে বা পরে কার্যকর হতে পারে, যা নির্ভর করে যে আপনি ট্রিগারটিকে BEFORE বা AFTER হিসেবে সংজ্ঞায়িত করেছেন।
Trigger তৈরি করার সিনট্যাক্স
মারিয়া ডিবি তে ট্রিগার তৈরি করতে নিচের সাধারণ সিনট্যাক্স ব্যবহার করা হয়:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
BEGIN
-- trigger body (SQL statements)
END;
এখানে:
- trigger_name: ট্রিগারের নাম।
- BEFORE | AFTER: ট্রিগারটি কি ইভেন্টের আগে (BEFORE) অথবা পরে (AFTER) কাজ করবে তা নির্ধারণ করে।
- INSERT | UPDATE | DELETE: ট্রিগারটি কোন ইভেন্টের জন্য কাজ করবে তা নির্ধারণ করে।
- table_name: যে টেবিলের উপর ট্রিগারটি কাজ করবে।
- FOR EACH ROW: প্রতিটি রো-তে পরিবর্তন ঘটলে ট্রিগারটি কার্যকর হবে।
- trigger body: ট্রিগারের শরীর, যেখানে আপনি SQL স্টেটমেন্ট লিখবেন।
উদাহরণ: ট্রিগারের ব্যবহার
১. BEFORE INSERT Trigger
ধরা যাক, একটি employees টেবিল রয়েছে এবং আপনি চান যে নতুন একটি কর্মচারী যোগ করার আগে, তাদের বেতন যদি ২০,০০০-এর কম হয়, তবে তাদের বেতন ২০,০০০ এ আপডেট হয়ে যাবে। এটি করার জন্য একটি BEFORE INSERT ট্রিগার তৈরি করা হবে।
CREATE TRIGGER before_insert_employee
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < 20000 THEN
SET NEW.salary = 20000;
END IF;
END;
এটি একটি BEFORE INSERT ট্রিগার, যা যখনই একটি নতুন কর্মচারী employees টেবিলে যুক্ত হবে, তখন তার বেতন ২০,০০০-এর কম হলে সেটি ২০,০০০ তে আপডেট করবে।
২. AFTER UPDATE Trigger
ধরা যাক, আপনি চান যে employees টেবিলের বেতন আপডেট হওয়ার পর একটি লোগ ফাইল বা অডিট টেবিলে সেই পরিবর্তন ট্র্যাক করা হোক। এটি করার জন্য একটি AFTER UPDATE ট্রিগার ব্যবহার করা যেতে পারে।
CREATE TRIGGER after_update_salary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_audit (employee_id, old_salary, new_salary, update_time)
VALUES (OLD.employee_id, OLD.salary, NEW.salary, NOW());
END;
এটি একটি AFTER UPDATE ট্রিগার, যা employees টেবিলের বেতন পরিবর্তনের পর একটি salary_audit টেবিলে পুরনো এবং নতুন বেতন সহ সেই আপডেটের সময় সংরক্ষণ করবে।
৩. AFTER DELETE Trigger
ধরা যাক, আপনি employees টেবিল থেকে কোনো কর্মচারী ডিলিট হলে, সেই কর্মচারীর তথ্য deleted_employees টেবিলে স্থানান্তর করতে চান। এই কাজটি করতে একটি AFTER DELETE ট্রিগার ব্যবহার করা যাবে।
CREATE TRIGGER after_delete_employee
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
INSERT INTO deleted_employees (employee_id, name, salary, delete_time)
VALUES (OLD.employee_id, OLD.name, OLD.salary, NOW());
END;
এটি একটি AFTER DELETE ট্রিগার, যা employees টেবিল থেকে কোনো রেকর্ড মুছে ফেললে সেই রেকর্ডটি deleted_employees টেবিলে স্থানান্তর করবে।
Trigger-এর সুবিধা ও ব্যবহার
- ডেটার অখণ্ডতা বজায় রাখা
ট্রিগার ব্যবহারের মাধ্যমে আপনি ডেটার অখণ্ডতা এবং সঠিকতা নিশ্চিত করতে পারেন। যেমন, কোনো ভুল ডেটা ইনসার্ট বা আপডেট হওয়া থেকে আটকানো। - স্বয়ংক্রিয় প্রক্রিয়া
ট্রিগার দ্বারা নির্দিষ্ট কাজগুলিকে স্বয়ংক্রিয়ভাবে সম্পাদন করা সম্ভব হয়, যেমন, লগিং, অডিটিং, বা নির্দিষ্ট শর্তের ভিত্তিতে ডেটা পরিবর্তন। - ডেটাবেসের নির্ভরযোগ্যতা বৃদ্ধি
ট্রিগার ব্যবহারের মাধ্যমে ডেটাবেসের ওপর কর্মক্ষমতার উপর নিয়ন্ত্রণ রাখা যায়, এবং ডেটাবেসের কোনো রেকর্ড ম্যানুয়ালি পরিবর্তিত হলে তা লগ করা যায়। - ডুপ্লিকেট বা ভুল ইনপুট এড়ানো
ট্রিগার ব্যবহার করে ডুপ্লিকেট বা ভুল ইনপুট সনাক্ত এবং সংশোধন করা যায়, যেমন—একটি নির্দিষ্ট কলামে ইউনিক মান থাকতে হবে এমন নিয়ম তৈরি করা।
Trigger-এর সীমাবদ্ধতা
- পারফরম্যান্সের প্রভাব
ট্রিগারটি যখন কোনো ইভেন্ট ঘটানোর পর কার্যকর হয়, তখন এটি কিছু পারফরম্যান্স সমস্যা তৈরি করতে পারে, বিশেষত যদি ট্রিগারটি বড় বা জটিল হয়। - ডিবাগিং সমস্যা
ট্রিগারগুলোর কার্যকারিতা ডিবাগ করা বেশ কঠিন হতে পারে, কারণ তারা ডেটাবেসের স্বয়ংক্রিয় কাজগুলির মধ্যে চলে এবং সাধারণ কোয়েরি স্টেটমেন্টের বাইরে চলে। - অনুপযুক্ত ব্যবহার
কিছু পরিস্থিতিতে, ট্রিগার ব্যবহার অপ্রয়োজনীয় বা অতিরিক্ত জটিলতা সৃষ্টি করতে পারে। তাই টেবিলের অবস্থা বা কাজের পরিবেশ অনুসারে ট্রিগার ব্যবহারে সতর্ক থাকা উচিত।
সারাংশ
Triggers মারিয়া ডিবি (MariaDB) তে একটি শক্তিশালী টুল, যা ডেটাবেসে নির্দিষ্ট ইভেন্ট বা ক্রিয়ার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে কার্যকর হয়। INSERT, UPDATE, এবং DELETE ইভেন্টগুলির জন্য ট্রিগার ব্যবহার করা যেতে পারে, যা ডেটাবেসের পারফরম্যান্স, অডিটিং এবং ডেটা অখণ্ডতা বজায় রাখতে সাহায্য করে। তবে, ট্রিগার ব্যবহারের সময় এর পারফরম্যান্স প্রভাব এবং ডিবাগিং সমস্যা সম্পর্কে সতর্ক থাকা গুরুত্বপূর্ণ।
Read more