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

VIEW ব্যবহার করে MySQL-এ CHECK CONSTRAINT অনুকরণ করা

MySQL CHECK কনস্ট্রেইন্ট সরাসরি সমর্থন করে না (পুরানো ভার্সনে), কিন্তু VIEW WITH CHECK OPTION ব্যবহার করে এটি অনুকরণ করা যায়।

উদাহরণ: গাড়ির নম্বার ফরম্যাট ভ্যালিডেশন

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

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

mysql> INSERT INTO car1 VALUES('AB-2X5-YZ');  -- অবৈধ
Query OK, 1 row affected (0.04 sec)  -- কোনো এরর নেই!

VIEW WITH CHECK OPTION তৈরি

mysql> CREATE VIEW car_invalid_check AS
    -> SELECT * FROM car1
    -> WHERE number RLIKE '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
    -> WITH CHECK OPTION;
Query OK, 0 rows affected (0.12 sec)

পরীক্ষা

mysql> INSERT INTO car_invalid_check VALUES('AB-2X5-YZ');
ERROR 1369 (HY000): CHECK OPTION failed 'query.car_invalid_check'  -- ব্লক

mysql> INSERT INTO car_invalid_check VALUES('AB-235-YZ');
Query OK, 1 row affected (0.09 sec)  -- বৈধ, গ্রহণ

mysql> UPDATE car_invalid_check SET NUMBER = 'AB-2X5-ZT';
ERROR 1369 (HY000): CHECK OPTION failed 'query.car_invalid_check'  -- আপডেট ব্লক

কারণ

WITH CHECK OPTION নিশ্চিত করে যে VIEW-এর মাধ্যমে ইনসার্ট/আপডেট হওয়া সারিগুলো VIEW-এর WHERE শর্ত পূরণ করবে। না করলে এরর ফেলে।

সীমাবদ্ধতা

  • শুধু VIEW-এর মাধ্যমে ডেটা ম্যানিপুলেশন করলে কাজ করে। বেস টেবিলে সরাসরি ইনসার্ট করলে বাইপাস হয়।
  • ট্রিগার বা GENERATED COLUMN-এ 비해 কম নিরাপদ।
  1. MySQL-এ GROUP_CONCAT দিয়ে মানগুলকে কোটেশন ম भीतर রাখা

  2. MySQL-এ UPDATE এবং REPLACE() ফাংশন দিয়ে হাইফেন (Hyphen) মুছে ফেলা

  3. MySQL-এ VIEW এবং FORMAT() ফাংশন ব্যবহার করে সংখ্যালে কমা (Separator) যোগ করুন

  4. MySQL-এ NOW() এবং INTERVAL ব্যবহার করে সময়ের পার্থক্য বের করুন