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

BEFORE INSERT ট্রিগার দিয়ে CHECK CONSTRAINT অনুকরণ করে মান ইনসার্ট করুন

MySQL রেফারেনশিয়াল ইন্টিগ্রিটির জন্য ফরেন কি সাপোর্ট করে, কিন্তু CHECK CONSTRAINT সাপোর্ট করে না। যাইহোক, ট্রিগার ব্যবহার করে এটি অনুকরণ করা যায়। নিচে একটি উদাহরণ দিয়ে এটি ব্যাখ্যা করা হলো।

উদাহরণ

মান লেইব একটি car টেবিল আছে যার রেজিস্ট্রেশন নম্বরের ফিক্সড সিনট্যাক্স: দুটি অক্ষর, একটি ড্যাশ, তিনটি অঙ্ক, একটি ড্যাশ, দুটি অক্ষর (যেমন: AB-235-YZ)।

mysql> CREATE TABLE car (number CHAR(9));
Query OK, 0 rows affected (0.32 sec)

mysql> INSERT INTO car VALUES('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)

উপরোক্ত মান বৈধ। কিন্তু নিচের ইনসার্টটি কী হবে?

mysql> INSERT INTO car VALUES('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

এই মান বৈধ নয় কারণ অঙ্কের মাঝপথে অক্ষর আছে, যা আমাদের ফিক্সড সিনট্যাক্সের বিরুদ্ধে।

CHECK CONSTRAINT অনুকরণের জন্য BEFORE INSERT ট্রিগার তৈরি

এমন অপবাঢ 삽입 রোধের জন্য নিচের ট্রিগার তৈরি করা যেতে পারে:

mysql> DELIMITER //
mysql> CREATE TRIGGER car_insert_value BEFORE INSERT ON car
    -> FOR EACH ROW
    -> BEGIN
    ->     IF NEW.number NOT RLIKE '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
    ->     THEN
    ->         SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Not a valid Number';
    ->     END IF;
    -> END //
Query OK, 0 rows affected (0.15 sec)

mysql> DELIMITER ;
mysql> DELETE FROM car;
Query OK, 2 rows affected (0.06 sec)

এখন ভুল নম্বর ইনসার্ট করার চেষ্টা করলে ট্রিগারটি এটিকে ব্লক করবে এবং ত্রুটি দেখাবে:

mysql> INSERT INTO car VALUES('AB-2X5-YZ');
ERROR 1644 (45000): Not a Valid Number

যখন বৈধ মান ইনসার্ট করবেন:

mysql> INSERT INTO car VALUES('AB-235-YZ');
Query OK, 1 row affected (0.04 sec)
  1. MySQL-এ BEFORE UPDATE ট্রিগার দিয়ে CHECK CONSTRAINT কীভাবে অনুকরণ করবেন আপডেটের সময়?

  2. MySQL ভিউতে মান আপডেট করা (টেবিলের মতো)

  3. VIEW ব্যবহার করে CHECK CONSTRAINT অনুকরণ করা

  4. MySQL-এ টেবিলে CHECK CONSTRAINT যোগ করা