কম্পিউটার

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


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

উদাহরণ

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

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

mysql> Insert into car2 values('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)

উপরের মানটি একটি বৈধ কিন্তু আমরা পরবর্তী ক্যোয়ারীতে যে মানটি সন্নিবেশ করতে যাচ্ছি তার সম্পর্কে কী বলা যায়৷

mysql> insert into car2 values('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

উপরের মানটি বৈধ নয় কারণ এতে সংখ্যাগুলির মধ্যে একটি অক্ষর রয়েছে যা আমরা যে নির্দিষ্ট বাক্য গঠন ব্যবহার করছি তার বিপরীতে৷

মানগুলি সন্নিবেশ করা এবং আপডেট করার জন্য চেক কন্সট্রাইন্ট অনুকরণ করতে জেনারেটেড কলাম ব্যবহার করা -

mysql> Alter table car2 add column number_validate char(0) as (case when number
rlike '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
  -> then '' end)
  -> virtual not null;
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> Describe car2;
+-----------------+---------+------+-----+---------+-------------------+
| Field           | Type    | Null | Key | Default | Extra             |
+-----------------+---------+------+-----+---------+-------------------+
| number          | char(9) | YES  |     | NULL    |                   |
| number_validate | char(0) | NO   |     | NULL    | VIRTUAL GENERATED |
+-----------------+---------+------+-----+---------+-------------------+
2 rows in set (0.00 sec)

mysql> Insert into car2 (number) values('AB-235-YZ');
Query OK, 1 row affected (0.09 sec)

উপরের ক্যোয়ারীটি বৈধ নম্বর সন্নিবেশ করায় তাই এটি গৃহীত হয়। কিন্তু নীচের ক্যোয়ারীটি বৈধ নম্বর আপডেট করার পাশাপাশি সন্নিবেশ করা হচ্ছে না।

mysql> Insert into car2 (number) values('AB-2X5-YZ');
ERROR 1048 (23000): Column 'number_validate' cannot be null

mysql> Update car2 set number='AB-2X5-YZ';
ERROR 1048 (23000): Column 'number_validate' cannot be null

  1. একটি মাইএসকিউএল টেবিলে একটি কলাম বিদ্যমান কিনা তা কিভাবে পরীক্ষা করবেন?

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

  3. মাইএসকিউএল এ অল্টার ব্যবহার করে কলাম কিভাবে যোগ করবেন?

  4. কিভাবে আমি MySQL এ একটি টেবিলের প্রতিটি কলাম সরাতে পারি?