কম্পিউটার

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


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

উদাহরণ

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

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)

  1. কিভাবে BEFORE UPDATE ট্রিগারগুলি টেবিলে মান আপডেট করার জন্য চেক কন্সট্রাইন্ট অনুকরণ করতে ব্যবহার করা যেতে পারে?

  2. কিভাবে আমরা MySQL ভিউতে কোন মান আপডেট করতে পারি যেহেতু আমরা MySQL টেবিলের মান আপডেট করতে পারি?

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

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