কম্পিউটার

কিভাবে আমরা ট্রিগার ব্যবহার করে চেক কন্সট্রাইন্ট অনুকরণ করতে পারি?


আমরা জানি যে মাইএসকিউএল রেফারেন্সিয়াল অখণ্ডতার জন্য বিদেশী কী সমর্থন করে কিন্তু এটি চেক সীমাবদ্ধতা সমর্থন করে না। কিন্তু আমরা ট্রিগার ব্যবহার করে তাদের অনুকরণ করতে পারি। এটি নীচে দেওয়া উদাহরণের সাহায্যে চিত্রিত করা যেতে পারে -

উদাহরণ

ধরুন আমাদের কাছে ‘কার’ নামের একটি টেবিল আছে যার ফিক্স সিনট্যাক্স রেজিস্ট্রেশন নম্বর থাকতে পারে যেমন দুটি অক্ষর, একটি ড্যাশ, তিন অঙ্ক, একটি ড্যাশ, দুটি অক্ষর নিম্নরূপ −

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)

উপরের মানটি বৈধ নয় কারণ এতে অঙ্কগুলির মধ্যে একটি অক্ষর রয়েছে যা আমরা যে স্থির সিনট্যাক্স ব্যবহার করছি তার বিরুদ্ধে।

মান সন্নিবেশ করার জন্য চেক কন্সট্রাইন্ট অনুকরণ করতে 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)

মান আপডেট করার জন্য চেক কন্সট্রাইন্ট অনুকরণ করতে আপডেটের আগে ট্রিগার তৈরি করা হচ্ছে -

এখন, ধরুন আমরা যদি একটি ভুল মান দিয়ে টেবিলটি আপডেট করার চেষ্টা করি তাহলে MySQL আমাদেরকে 7minus হিসাবে তা করতে বাধা দেবে না;

mysql> update car set number='AB-2X5-YZ';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0

উপরের ক্যোয়ারীটি 'কার' টেবিলে ভুল মান আপডেট করেছে। নিম্নলিখিত ক্যোয়ারীতে আমরা একটি BEFORE UPDATE ট্রিগার তৈরি করতে যাচ্ছি যা আমাদের টেবিলে ভুল ডেটা আপডেট করতে বাধা দেবে -

mysql> delimiter //
mysql> create trigger car_update_value before update 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.11 sec)

mysql> Delimiter ;

mysql> update car set number='AB-2X5-YZ';
ERROR 1644 (45000): Not a valid number

  1. কিভাবে আমরা PHP স্ক্রিপ্ট ব্যবহার করে একটি MySQL টেবিল তৈরি করতে পারি?

  2. চেক কন্সট্রাইন্ট অনুকরণ করতে ভিউ কিভাবে ব্যবহার করা যেতে পারে?

  3. কিভাবে আমি MySQL এ একটি টেবিলে একটি চেক সীমাবদ্ধতা যোগ করব?

  4. কিভাবে মাইএসকিউএল সংস্করণ চেক করবেন