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)