Database Tutorials SQLite এর Views এবং Triggers গাইড ও নোট

353

SQLite এর Views

Views হল ভার্চুয়াল টেবিল যা একটি বা একাধিক টেবিল থেকে ডেটা নির্বাচন করে, কিন্তু বাস্তবে কোনো ডেটা সংরক্ষণ করে না। এটি মূলত একটি SELECT কুয়েরি যা নিয়মিতভাবে ব্যবহার হতে পারে। Views তৈরি করতে মূল উদ্দেশ্য হলো ডেটাবেসের জটিল কুয়েরি গুলি সিমপ্লিফাই করা এবং পুনরায় ব্যবহারযোগ্যভাবে রাখা। এটি অ্যাপ্লিকেশনের স্তরে ডেটা অ্যাক্সেস সহজ করে।

View তৈরি করা

CREATE VIEW কমান্ড ব্যবহার করে একটি view তৈরি করা হয়।

CREATE VIEW user_view AS
SELECT name, age FROM users WHERE age > 18;

এই কমান্ডটি users টেবিল থেকে এমন name এবং age কলাম নিয়ে একটি user_view নামক ভিউ তৈরি করবে, যেখানে age ১৮ এর বেশি।

View ব্যবহার করা

একবার ভিউ তৈরি হলে, আপনি এটিকে সাধারণত একটি টেবিলের মতো ব্যবহার করতে পারেন। তবে মনে রাখতে হবে যে, এটি একটি ভার্চুয়াল টেবিল, ডেটা আসলে users টেবিল থেকেই আসছে।

SELECT * FROM user_view;

এটি user_view ভিউ থেকে ডেটা নির্বাচন করবে, যা আসলে users টেবিলের age > 18 শর্ত পূরণ করা ডেটা।

View মুছা

ভিউ মুছতে DROP VIEW কমান্ড ব্যবহার করা হয়।

DROP VIEW user_view;

SQLite এর Triggers

Triggers হল এমন ডাটাবেস অবজেক্ট যা ডাটাবেসের কোনো অপারেশন (যেমন, INSERT, UPDATE, বা DELETE) সম্পাদিত হলে স্বয়ংক্রিয়ভাবে এক্টিভেট হয়। Trigger এর মাধ্যমে আপনি কোনো ডেটা পরিবর্তন হলে নির্দিষ্ট কাজ (যেমন, লগিং, অডিটিং, কিংবা ডেটা সুরক্ষা) করতে পারেন।

Trigger তৈরি করা

SQLite-এ trigger তৈরি করতে CREATE TRIGGER কমান্ড ব্যবহার করা হয়।

CREATE TRIGGER after_insert_user
AFTER INSERT ON users
BEGIN
  UPDATE users SET age = age + 1 WHERE name = NEW.name;
END;

এই ট্রিগারটি users টেবিলে নতুন একটি রেকর্ড INSERT করার পর, age কলামকে ১ বৃদ্ধি করবে।

  • AFTER: এটি নির্দেশ করে যে ট্রিগারটি INSERT, UPDATE, বা DELETE অপারেশন সম্পাদিত হওয়ার পর কার্যকর হবে।
  • BEFORE: এটি নির্দেশ করে যে ট্রিগারটি অপারেশনটি কার্যকর হওয়ার আগে চলে।
  • NEW: এটি নতুন ইনসার্ট হওয়া বা আপডেট হওয়া রেকর্ডের মানকে প্রতিনিধিত্ব করে।

Trigger এর বিভিন্ন প্রকার

  1. AFTER Trigger: এটি কোনো অপারেশন শেষে কার্যকর হয়। যেমন, একটি রেকর্ড ইনসার্ট হওয়ার পর কোনো প্রক্রিয়া চালানো।
  2. BEFORE Trigger: এটি কোনো অপারেশন শুরু হওয়ার আগে কার্যকর হয়। যেমন, একটি রেকর্ড আপডেট হওয়ার আগে কিছু কাজ করা।
  3. INSTEAD OF Trigger: এটি ডিফল্ট অপারেশনকে প্রতিস্থাপন করে, অর্থাৎ, কোনো অপারেশন সম্পাদিত হওয়ার পরিবর্তে এটি অন্য কিছু করবে।

Trigger ব্যবহার করা

যখন আপনি INSERT, UPDATE, বা DELETE অপারেশন করেন, তখন Trigger স্বয়ংক্রিয়ভাবে কার্যকর হয়ে কাজ করবে।

INSERT INTO users (name, age) VALUES ('Alice', 30);

এই কমান্ডটি ইনসার্ট করার পর, পূর্বের উদাহরণে তৈরি করা ট্রিগার অনুযায়ী age ১ বাড়ানো হবে।

Trigger মুছা

একটি ট্রিগার মুছতে DROP TRIGGER কমান্ড ব্যবহার করা হয়।

DROP TRIGGER after_insert_user;

সারাংশ

  • Views হল ভার্চুয়াল টেবিল যা ডেটার নির্বাচনের জন্য ব্যবহার করা হয় এবং সেগুলি মূল টেবিল থেকে ডেটা নির্বাচন করে কিন্তু ডেটা সংরক্ষণ করে না। ভিউয়ের মাধ্যমে জটিল কুয়েরি গুলি সহজ করা যায়।
  • Triggers হল স্বয়ংক্রিয়ভাবে কার্যকর হওয়া ডাটাবেস অবজেক্ট যা INSERT, UPDATE, বা DELETE অপারেশন সম্পাদিত হলে নির্দিষ্ট কাজ করে। ট্রিগারটি ডেটাবেসের কার্যক্রমকে আরো কার্যকর এবং সুরক্ষিত করতে ব্যবহৃত হয়।

SQLite এর Views এবং Triggers ব্যবহার করে ডাটাবেসের কার্যক্ষমতা এবং কার্যকরীতা উন্নত করা যায়।

Content added By

View তৈরি এবং ব্যবহারের উদাহরণ

342

View হল একটি ভার্চুয়াল টেবিল যা মূল টেবিলের উপর ভিত্তি করে তৈরি হয়। এটি কোনো ডেটাবেসের রেকর্ডগুলোকে একটি নির্দিষ্ট আঙ্গিকে প্রদর্শন করতে সাহায্য করে, তবে এটি কোনো স্থায়ী ডেটা সংরক্ষণ করে না। View মূলত একটি SQL কুয়েরির রেজাল্টের মতো কাজ করে, যা আপনাকে সহজে এবং দ্রুত ডেটা ফিল্টার এবং প্রদর্শন করতে সহায়তা করে।


১. View তৈরি করা

SQLite-এ একটি View তৈরি করার জন্য CREATE VIEW কমান্ড ব্যবহার করা হয়। এটি সাধারণত টেবিলের ডেটা নিয়ে কাজ করে এবং একটি নতুন ভার্চুয়াল টেবিল তৈরি করে যা SQL কুয়েরির রেজাল্টস দেখায়।

উদাহরণ ১: View তৈরি করা

ধরা যাক, আমাদের দুটি টেবিল রয়েছে: employees এবং departments। আমরা একটি View তৈরি করব যা কর্মচারীদের নাম এবং তাদের বিভাগের নাম দেখাবে।

employees টেবিল:

idnamedepartment_id
1Alice1
2Bob2
3Charlie1

departments টেবিল:

iddepartment_name
1HR
2IT

এখন আমরা একটি View তৈরি করব যা কর্মচারীদের নাম এবং তাদের বিভাগের নাম দেখাবে।

CREATE VIEW employee_department_view AS
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

এটি একটি employee_department_view নামক View তৈরি করবে, যা employees এবং departments টেবিলের তথ্যের সংমিশ্রণ করবে।


২. View থেকে ডাটা নির্বাচন করা

একবার View তৈরি হয়ে গেলে, আপনি এটি সাধারণ একটি টেবিলের মতো ব্যবহার করতে পারবেন। আপনাকে View থেকে ডাটা দেখতে হলে SELECT কুয়েরি ব্যবহার করতে হবে।

উদাহরণ ২: View থেকে ডাটা নির্বাচন করা

SELECT * FROM employee_department_view;

আউটপুট:

namedepartment_name
AliceHR
BobIT
CharlieHR

এখানে, employee_department_view View থেকে আমরা কর্মচারীদের নাম এবং তাদের বিভাগের নাম দেখতে পাচ্ছি। এটি মূলত employees এবং departments টেবিলের একত্রিত ডাটা।


৩. View আপডেট করা

SQLite-এ আপনি সরাসরি একটি View আপডেট করতে পারবেন না। তবে, আপনি যদি View-এর কুয়েরি পরিবর্তন করতে চান, তবে আপনাকে পূর্বের View মুছে ফেলে নতুন View তৈরি করতে হবে।

উদাহরণ ৩: View মুছে ফেলা

DROP VIEW IF EXISTS employee_department_view;

এটি পূর্বের employee_department_view View মুছে ফেলবে। এরপর আপনি নতুন কুয়েরি দিয়ে নতুন View তৈরি করতে পারবেন।


৪. View মুছে ফেলা

যখন View আর প্রয়োজন না থাকে, তখন আপনি DROP VIEW কমান্ড দিয়ে View মুছে ফেলতে পারেন।

উদাহরণ ৪: View মুছে ফেলা

DROP VIEW employee_department_view;

এটি employee_department_view নামক View মুছে ফেলবে।


সারাংশ

  • View একটি ভার্চুয়াল টেবিল যা মূল টেবিল থেকে ডেটা নির্বাচিত করে এবং ব্যবহারকারীকে সহজে ডেটা দেখার সুযোগ প্রদান করে।
  • SQLite-এ View তৈরি করতে CREATE VIEW কমান্ড ব্যবহার করা হয়, এবং View থেকে ডেটা নির্বাচন করতে সাধারণ SELECT কুয়েরি ব্যবহার করা হয়।
  • View থেকে ডেটা আপডেট, ইনসার্ট বা ডিলিট করা যায় না, তবে কুয়েরি পরিবর্তন করতে নতুন View তৈরি করা যায়।
  • যখন View আর প্রয়োজনীয় না থাকে, তখন DROP VIEW দিয়ে সেটি মুছে ফেলা যায়।
Content added By

Virtual Tables এবং Temporary Tables

298

SQLite-এ Virtual Tables এবং Temporary Tables হল দুটি বিশেষ ধরনের টেবিল, যেগুলি সাধারণ টেবিলের থেকে কিছুটা আলাদা। এগুলি নির্দিষ্ট পরিস্থিতিতে বা প্রয়োজনে ব্যবহৃত হয় এবং ডাটাবেস পরিচালনায় সাহায্য করে।


১. Virtual Tables (ভার্চুয়াল টেবিল)

Virtual Tables হল এমন টেবিল, যেগুলি শারীরিকভাবে ডাটাবেসে সংরক্ষিত থাকে না, কিন্তু SQL কুয়েরি ব্যবস্থাপক (query processor) তাদেরকে একটি বাস্তব টেবিলের মতো ব্যবহার করতে পারে। এই টেবিলগুলো একটি VIRTUAL TABLE MODULE দ্বারা পরিচালিত হয়, যা SQLite-এ কাস্টম ডাটা স্টোরেজ ব্যবস্থার মাধ্যমে কাজ করে। ভার্চুয়াল টেবিলগুলো সাধারণত ফাইল সিস্টেম বা অন্যান্য সোর্স থেকে ডেটা সংগ্রহ করতে ব্যবহৃত হয়।

ভার্চুয়াল টেবিলের সুবিধা:

  • ডেটা আনা: ভার্চুয়াল টেবিল কাস্টম ডাটা স্টোরেজ ব্যবস্থায় (যেমন, অন্য ডাটাবেস, API, বা ফাইল) সংরক্ষিত ডেটা পড়তে সাহায্য করে।
  • SQL কুয়েরি: SQLite ভার্চুয়াল টেবিলের উপর SQL কুয়েরি চালাতে পারে, কিন্তু এর ডেটা ডাটাবেসে সংরক্ষিত থাকে না।
  • অস্থায়ী তথ্য ব্যবস্থাপনা: এই টেবিলগুলি সাধারণত অস্থায়ী এবং অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে তথ্য স্থানান্তরের জন্য ব্যবহৃত হয়।

ভার্চুয়াল টেবিল তৈরি করা:

SQLite-এ ভার্চুয়াল টেবিল তৈরি করতে CREATE VIRTUAL TABLE কমান্ড ব্যবহার করা হয়। উদাহরণ:

CREATE VIRTUAL TABLE my_virtual_table USING fts4(content TEXT);

এই কুয়েরি fts4 ফাংশন ব্যবহার করে একটি ভার্চুয়াল টেবিল তৈরি করবে, যা একটি পূর্ণাঙ্গ টেক্সট অনুসন্ধান (Full-text search) সুবিধা প্রদান করবে।


২. Temporary Tables (অস্থায়ী টেবিল)

Temporary Tables হল এমন টেবিল যা একটি ডাটাবেস সেশন চলাকালীন সময়ে তৈরি হয় এবং সেশন শেষে স্বয়ংক্রিয়ভাবে মুছে যায়। এগুলি সাধারণত ডেটা প্রক্রিয়াকরণের জন্য ব্যবহার করা হয় এবং সেগুলোর মধ্যে সংরক্ষিত ডেটা শুধুমাত্র বর্তমান সেশন বা ট্রানজেকশনের মধ্যে থাকে।

অস্থায়ী টেবিলের সুবিধা:

  • স্বয়ংক্রিয় পরিষ্কার: যখন সেশন বা ট্রানজেকশন শেষ হয়, তখন অস্থায়ী টেবিলগুলো মুছে যায়, ফলে ডাটাবেসের জায়গা অপচয় হয় না।
  • প্রসেসিংয়ের জন্য উপযোগী: অস্থায়ী টেবিলগুলি সাধারণত ডেটা প্রক্রিয়াকরণ বা অস্থায়ী ফলাফল সংগ্রহের জন্য ব্যবহৃত হয়।
  • স্পিড: ডেটাবেসে অস্থায়ী টেবিলগুলি সাধারণত অন্যান্য টেবিলের চেয়ে দ্রুত হয়, কারণ তারা সেশন শেষে মুছে যায় এবং দীর্ঘমেয়াদী ডাটা সঞ্চয় নয়।

অস্থায়ী টেবিল তৈরি করা:

SQLite-এ একটি অস্থায়ী টেবিল তৈরি করতে CREATE TEMPORARY TABLE কমান্ড ব্যবহার করা হয়। উদাহরণ:

CREATE TEMPORARY TABLE temp_users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER
);

এই কুয়েরি একটি অস্থায়ী temp_users টেবিল তৈরি করবে, যা শুধুমাত্র চলমান সেশনের জন্য থাকবে।


৩. Virtual Tables এবং Temporary Tables এর মধ্যে পার্থক্য

বৈশিষ্ট্যVirtual TablesTemporary Tables
ডেটা সংরক্ষণভার্চুয়াল টেবিলের ডেটা ডাটাবেসে সংরক্ষিত থাকে না।অস্থায়ী টেবিলের ডেটা ডাটাবেসে সংরক্ষিত থাকে, কিন্তু সেশন শেষে মুছে যায়।
ব্যবহারকাস্টম স্টোরেজ মডিউল ব্যবহার করে ডেটা পড়া।অস্থায়ী ডেটা সঞ্চয় এবং প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়।
মুছে ফেলাডাটাবেস থেকে মুছে ফেলার জন্য DROP VIRTUAL TABLE ব্যবহার করতে হয়।সেশন শেষ হলে স্বয়ংক্রিয়ভাবে মুছে যায়।
পারফরম্যান্সভার্চুয়াল টেবিল প্রক্রিয়াকরণ দ্রুত করতে পারে, তবে কাস্টম ফাংশন ব্যবহার হয়।অস্থায়ী টেবিলের পারফরম্যান্স সাধারণত ভালো হয়, কারণ এগুলি শুধু সেশন পর্যায়ে থাকে।
ব্যবহারযোগ্যতাঅন্য ডেটা সোর্স বা বিশেষ কার্যকারিতা প্রয়োজন হলে ব্যবহৃত হয়।অস্থায়ী বা ইন্টারিম ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়।

সারাংশ

SQLite-এ Virtual Tables এবং Temporary Tables দুটি গুরুত্বপূর্ণ টেবিল টাইপ। Virtual Tables সাধারণত কাস্টম ডেটা সোর্স বা বিশেষ স্টোরেজ মডিউল ব্যবহার করে ডেটা এক্সেস করতে ব্যবহৃত হয়, যেখানে Temporary Tables শুধুমাত্র এক সেশন বা ট্রানজেকশনের জন্য ব্যবহৃত হয় এবং সেশন শেষে স্বয়ংক্রিয়ভাবে মুছে যায়। এগুলি ডাটাবেসের পারফরম্যান্স এবং কার্যকারিতা বৃদ্ধি করতে সাহায্য করে।

Content added By

Triggers তৈরি এবং ব্যবহারের উদাহরণ

284

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 এর সুবিধা

  1. অটোমেশন: Trigger ব্যবহারের মাধ্যমে আপনি অনেক কাজ অটোমেটিক্যালি করতে পারেন, যেমন ডাটা ইনসার্ট বা আপডেট হলে লগ রেকর্ড করা, ডাটা মুছে ফেলার আগে ব্যাকআপ রাখা ইত্যাদি।
  2. ডেটা এক্সিকিউশন নিয়ন্ত্রণ: Trigger দিয়ে আপনি নির্দিষ্ট ইভেন্টের আগে বা পরে কিছু কাজ চালাতে পারেন, যেমন ডাটা আপডেটের আগে কিছু ভ্যালিডেশন করা।
  3. ডাটাবেস নিরাপত্তা: Trigger ব্যবহার করে আপনি ডাটাবেসের নিরাপত্তা বাড়াতে পারেন, যেমন একটি টেবিল থেকে ডাটা মুছে ফেলার আগে যাচাই করা বা ডাটা পরিবর্তন হওয়ার আগে লগ রাখা।

সারাংশ

Triggers একটি শক্তিশালী ফিচার যা ডাটাবেসে স্বয়ংক্রিয় কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। আপনি INSERT, UPDATE, DELETE ইভেন্টে Trigger ব্যবহার করে ডাটাবেসের উপর নির্দিষ্ট কাজ করতে পারেন। Triggers ডাটাবেসের অটোমেশন ও কার্যকারিতা বৃদ্ধি করতে সাহায্য করে এবং ডেটা এক্সিকিউশনে আরো নিয়ন্ত্রণ প্রদান করে।

Content added By

BEFORE এবং AFTER Triggers এর ব্যবহার

338

Triggers হল একটি ডাটাবেস ফিচার যা স্বয়ংক্রিয়ভাবে নির্দিষ্ট ইভেন্টের পর ডাটাবেসে কিছু কার্যক্রম সম্পাদন করতে সাহায্য করে। Trigger সাধারাণত INSERT, UPDATE, অথবা DELETE কুয়েরির আগ বা পর কার্যকর হয়। যখন নির্দিষ্ট ইভেন্ট ঘটে, তখন একটি Trigger চালানো হয়। BEFORE এবং AFTER Triggers দুটি জনপ্রিয় Trigger টাইপ যা ডাটাবেসের ডাটা পরিবর্তনের আগে বা পরে কাজ করে।


BEFORE Trigger

BEFORE Trigger তখন কার্যকর হয় যখন একটি INSERT, UPDATE, অথবা DELETE কুয়েরি চালানোর আগেই কোনো নির্দিষ্ট অপারেশন করতে হয়। এটি ডাটাবেসে পরিবর্তন আনার আগে চালানো হয়, এবং এই Trigger ব্যবহার করে আপনি ডাটাবেসে কোনো ধরনের পরিবর্তন করার আগে শর্ত পরীক্ষা করতে বা সংশোধন করতে পারেন।

BEFORE Trigger এর সুবিধা:

  • ডাটা ভ্যালিডেশন: আপনি যদি ডাটাবেসে কোনো ডাটা ইনসার্ট বা আপডেট করার আগে শর্ত পরীক্ষা করতে চান তবে BEFORE Trigger ব্যবহার করা হয়।
  • অপারেশন রদ করা: আপনি চাইলে কোনো ডাটা পরিবর্তন করার পূর্বে অপারেশনটিকে রদ করতে পারেন (যেমন, INSERT বা UPDATE অপারেশন বন্ধ করা)।

উদাহরণ: BEFORE Trigger

ধরা যাক, আপনার একটি employees টেবিল আছে, যেখানে কর্মীদের বয়সের উপর নির্ভর করে কিছু শর্ত রয়েছে। যদি কর্মী ১৮ বছরের কম বয়সী হয়, তাহলে সেই রেকর্ড INSERT করা যাবে না।

CREATE TRIGGER check_age_before_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    -- যদি কর্মীর বয়স ১৮ বছরের কম হয়, তাহলে ইনসার্ট বন্ধ করে দিন
    IF NEW.age < 18 THEN
        RAISE (ABORT, 'Age must be 18 or older');
    END IF;
END;

এখানে, BEFORE INSERT Trigger ব্যবহার করা হয়েছে যাতে ডাটা ইনসার্ট হওয়ার আগেই বয়স পরীক্ষা করা হয়।


AFTER Trigger

AFTER Trigger তখন কার্যকর হয় যখন কোনো INSERT, UPDATE, অথবা DELETE কুয়েরি সফলভাবে ডাটাবেসে সম্পন্ন হওয়ার পরে কোনো নির্দিষ্ট কার্যক্রম সম্পাদন করতে হয়। এই Triggerটি সাধারণত লগিং, হিসাব বা অন্যান্য নির্দিষ্ট কাজ করার জন্য ব্যবহৃত হয়।

AFTER Trigger এর সুবিধা:

  • লগিং এবং হিসাব: ডাটা পরিবর্তন হওয়ার পরে আপনি কোনো কার্যক্রম যেমন লগিং বা হিসাব রাখতে পারেন।
  • ডাটাবেস পরিবর্তন সম্পন্ন হওয়ার পর কার্যকরী কোড চালানো: কোনো ডাটাবেসে পরিবর্তন সফলভাবে সম্পন্ন হওয়ার পরে, এর সাথে সম্পর্কিত অন্যান্য অ্যাকশন সম্পাদন করতে AFTER Trigger ব্যবহার করা হয়।

উদাহরণ: AFTER Trigger

ধরা যাক, আপনি employees টেবিলের কোনো রেকর্ড UPDATE করার পর একটি লগ ফাইল বা টেবিল তৈরি করতে চান, যাতে পরিবর্তন সম্পর্কে তথ্য রাখা হয়।

CREATE TRIGGER log_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    -- UPDATE হওয়ার পরে একটি লগ রেকর্ড ইনসার্ট করা
    INSERT INTO employee_log (employee_id, old_salary, new_salary, change_date)
    VALUES (NEW.id, OLD.salary, NEW.salary, DATETIME('now'));
END;

এখানে, AFTER UPDATE Trigger ব্যবহার করা হয়েছে, যাতে employees টেবিলের আপডেট হওয়ার পর, আপডেট সম্পর্কিত তথ্য employee_log টেবিলে সঞ্চিত হয়।


BEFORE এবং AFTER Trigger এর মধ্যে পার্থক্য

বিষয়BEFORE TriggerAFTER Trigger
কার্যকর হওয়ার সময়ডাটাবেসে কোনো পরিবর্তন হওয়ার আগেডাটাবেসে কোনো পরিবর্তন সম্পন্ন হওয়ার পরে
ব্যবহারডাটাবেসে পরিবর্তন করার আগে শর্ত যাচাই বা পরিবর্তন রোধ করাডাটাবেসে পরিবর্তন হওয়ার পরে লগিং বা হিসাব রাখা
প্রভাবঅপারেশনটি সম্পন্ন হওয়ার আগে ডাটা সংশোধন বা বাতিল করা যেতে পারেঅপারেশনটি সফলভাবে সম্পন্ন হওয়ার পর একটি অ্যাকশন সম্পাদন করা

সারাংশ

BEFORE এবং AFTER Trigger দুটি গুরুত্বপূর্ণ টুল যা SQL ডাটাবেসে ডাটা পরিবর্তনের পূর্বে বা পরে কিছু কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়। BEFORE Trigger আপনাকে ডাটাবেসে পরিবর্তন আসার আগে শর্ত যাচাই বা রোধ করতে সাহায্য করে, এবং AFTER Trigger আপনাকে কোনো ডাটাবেস পরিবর্তন সফলভাবে সম্পন্ন হওয়ার পর নির্দিষ্ট কার্যক্রম সম্পাদন করতে সাহায্য করে। যথাযথভাবে ব্যবহার করলে, এই Triggers ডাটাবেসের পারফরম্যান্স এবং ডাটা ইন্টিগ্রিটি নিশ্চিত করতে সাহায্য করতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...