কম্পিউটার টিউটোরিয়াল

MySQL-এ BEFORE INSERT ট্রিগার তৈরি করা

ডেটা ইনসার্ট হওয়ার **পূর্বে** যাচাই বা পরিবর্তন করতে BEFORE INSERT TRIGGER ব্যবহার করা হয়। নিচে `Value` কলামের যোগফল ৬০ অতিক্রম করলে ইনসার্ট ব্লক করার উদাহরণ দেওয়া হলো।

সিনট্যাক্স

DELIMITER //
CREATE TRIGGER yourTriggerName
BEFORE INSERT ON yourTableName
FOR EACH ROW
BEGIN
    -- আপনার লজিক
END //
DELIMITER ;

টেবিল তৈরি

mysql> CREATE TABLE DemoTable1919 (Value INT);

ট্রিগার তৈরি: যোগফল ৬০ বেশি হলে ব্লক

mysql> DELIMITER //
mysql> CREATE TRIGGER sumis60
    BEFORE INSERT ON DemoTable1919
    FOR EACH ROW
    BEGIN
        DECLARE custom_message VARCHAR(256);
        IF (SELECT SUM(Value) FROM DemoTable1919) = 60 THEN
            SET custom_message = 'cannot insert because sum(Value) is greater than 60';
            SIGNAL SQLSTATE '13500' SET MESSAGE_TEXT = custom_message;
        END IF;
    END //
mysql> DELIMITER ;

ট্রিগার টেস্ট করা

mysql> INSERT INTO DemoTable1919 VALUES (10);  -- OK
mysql> INSERT INTO DemoTable1919 VALUES (20);  -- OK
mysql> INSERT INTO DemoTable1919 VALUES (30);  -- OK (মোট ৬০)
mysql> INSERT INTO DemoTable1919 VALUES (40);  -- ERROR!

এরর আউটপুট:

ERROR 1644 (13500): cannot insert because sum(Value) is greater than 60

গুরুত্বপূর্ণ পয়েন্ট

  • FOR EACH ROW — প্রতিটি ইনসার্ট সারির জন্য ট্রিগার চালানো হয়।
  • SIGNAL SQLSTATE '13500' — কাস্টম এরর থ্রো করে (45000 বা 13500 ইউজার-ডিফাইনড)।
  • NEW.Value দিয়ে ইনসার্ট হওয়া মান পাওয়া যায় (এখানে পুরো টেবিলের SUM চেক করা হয়েছে)।
  • DELIMITER // — সেমিকোলন (;) প্রসিডিউর/ট্রিগারের ভেতরে ব্যবহার করার জন্য ডিলিমিটার পরিবর্তন করা হয়।

সীমাবদ্ধতা

  • BEFORE ট্রিগারে `AUTO_INCREMENT` মান পাওয়া যায় না (AFTER ট্রিগারে পাওয়া যায়)।
  • ট্রিগারের ভেতর থেকে একই টেবিলে `SELECT` করা যায়, কিন্তু `INSERT/UPDATE/DELETE` করা যায় না (mutating table error)।
  1. MySQL-এ CHAR(1) কলামে NULL ইনসার্ট করা

  2. MySQL INSERT-এ ডুপ্লিকেট সারি প্রতিরোধ করা

  3. MySQL-এ ডাবল কোটস (") সহ রেকর্ড ইনসার্ট করার পদ্ধতি (Escape ব্যবহার করে)

  4. MySQL-এ AUTO_INCREMENT কলাম রিসেট করা (TRUNCATE TABLE)