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 ট্রিগার দিয়ে আপডেটও বন্ধ করা যায়। এটি ডেটা ইন্টিগ্রিটি বজায় রাখতে খুব কার্যকর।