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

MySQL-এ ট্রিগার ব্যবহার করে INSERT বা UPDATE বন্ধ করা

MySQL-এ INSERT বা UPDATE বন্ধ করতে SIGNAL SQL STATE কমান্ড ব্যবহার করতে হয়। ট্রিগারের সিনট্যাক্স নিচে দেওয়া হলো:

DELIMITER // CREATE TRIGGER yourTriggerName BEFORE INSERT ON yourTableName FOR EACH ROW BEGIN yourCondition THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'anyMessageToEndUser'; END // DELIMITER ;

এখন একটি ট্রিগার তৈরি করা যাক যা নির্দিষ্ট শর্তে টেবিলে রেকর্ড ইনসার্ট করা বন্ধ করবে। ট্রিগার তৈরির কোয়েরি:

mysql> DELIMITER // mysql> CREATE TRIGGER InsertPreventTrigger BEFORE INSERT ON Insert_Prevent   
    -> FOR EACH ROW   
    -> BEGIN   
    -> IF(new.Id < 1 or new.Id > 5) THEN   
    -> SIGNAL SQLSTATE '45000'   
    -> SET MESSAGE_TEXT = 'You can not insert record';   
    -> END IF;   
    -> END // Query OK, 0 rows affected (0.20 sec) mysql> DELIMITER ;

উপরের ট্রিগারটি Id ১-এর চেয়ে কম বা ৫-এর চেয়ে বড় হলে ইনসার্ট বন্ধ করবে।

এখন একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:

mysql> create table Insert_Prevent  
    -> (  
    -> Id int   
    -> ); Query OK, 0 rows affected (0.62 sec)

এখন ১-এর চেয়ে কম বা ৫-এর চেয়ে বড় রেকর্ড ইনসার্ট করা যাক। ট্রিগার তৈরি হওয়ায় এরর মেসেজ আসবে। এরর মেসেজ নিচে দেওয়া হলো:

mysql> insert into Insert_Prevent values(0); ERROR 1644 (45000): You cannot insert record mysql> insert into Insert_Prevent values(6); ERROR 1644 (45000): You cannot insert record

যদি ১ থেকে ৫ এর মাঝপথে রেকর্ড ইনসার্ট করা হয়, তবে কোনো এরর হবে না। ট্রিগার অনুযায়ী ১ থেকে ৫ পর্যন্ত রেকর্ড ইনসার্ট হওয়া যাবে। রেকর্ড ইনসার্ট করার কোয়েরি:

mysql> insert into Insert_Prevent values(1); Query OK, 1 row affected (0.20 sec) mysql> insert into Insert_Prevent values(5); Query OK, 1 row affected (0.17 sec) mysql> insert into Insert_Prevent values(2); Query OK, 1 row affected (0.11 sec) mysql> insert into Insert_Prevent values(3); Query OK, 1 row affected (0.23 sec)

সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:

mysql> select *from Insert_Prevent;

আউটপুট নিচে দেওয়া হলো:

+------+ | Id  | +------+ |  1 | |  5 | | 2 | | 3 | +------+ 4 rows in set (0.00 sec)

ব্যাখ্যা: BEFORE INSERT ট্রিগার ইনসার্ট হওয়ার আগে এক্সিকিউট হয়। SIGNAL SQLSTATE '45000' একটি কাস্টম এরর থ্রো করে যা ইনসার্ট অপারেশন বাতিল করে দেয়। MESSAGE_TEXT-এ কাস্টম এরর মেসেজ সেট করা যায়। একইভাবে BEFORE UPDATE ট্রিগার দিয়ে আপডেটও বন্ধ করা যায়। এটি ডেটা ইন্টিগ্রিটি বজায় রাখতে খুব কার্যকর।

  1. MySQL-এ INSERT… ON DUPLICATE KEY UPDATE বাস্তবায়ন

  2. MySQL-এ ট্রিগার ব্যবহার করে INSERT কমান্ডে টেবিল আপডেট করা

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

  4. MySQL-এ সঠিকভাবে DELIMITER ব্যবহার করে স্টোরড প্রসিডিউরে মান ইনসার্ট করা