কম্পিউটার

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


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

উদাহরণ

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

mysql> Create table car (number char(9));
Query OK, 0 rows affected (0.32 sec)

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

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

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. টেবিলে মান সন্নিবেশ করার জন্য চেক কন্সট্রাইন্ট অনুকরণ করতে কীভাবে INSERT ট্রিগারের আগে ব্যবহার করা যেতে পারে?

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

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

  4. আমি কিভাবে MySQL এ বুলিয়ান মান আপডেট করতে পারি?