আপডেটেবল ভিউতে আংশিক ডেটা দেখায় এমন ভিউতে আপডেট করলে ভিউ ইনকনসিস্টেন্ট হতে পারে। কনসিস্টেন্সি নিশ্চিত করতে WITH CHECK OPTION ক্লজ ব্যবহার করা উচিত।
WITH CHECK OPTION ক্লজ (CREATE VIEW-এ অপশনাল) আমাদেরকে সেই সারিগুলো আপডেট বা ইনসার্ট করতে বাধা দেয় যা ভিউয়ের মাধ্যমে দৃশ্যমান নয়। সহজ কথায়, ইনসার্ট/আপডেট অপারেশন ভিউর ডেফিনিশন অনুযায়ী কনফার্মড হয় কিনা তা MySQL নিশ্চিত করে।
সিনট্যাক্স
CREATE OR REPLACE VIEW view_name AS select_statement WITH CHECK OPTION;
উদাহরণ
Student_info টেবিল:
mysql> SELECT * FROM student_info;
+------+---------+------------+------------+
| id | Name | Address | Subject |
+------+---------+------------+------------+
| 101 | YashPal | Amritsar | History |
| 105 | Gaurav | Chandigarh | Literature |
| 125 | Raman | Shimla | Computers |
| 130 | Ram | Jhansi | Computers |
+------+---------+------------+------------+
WITH CHECK OPTION ছাড়া ভিউ:
mysql> CREATE OR REPLACE VIEW Info AS
-> SELECT Id, Name, Address, Subject
-> FROM student_info WHERE Subject = 'Computers';
Query OK, 0 rows affected (0.46 sec)
mysql> INSERT INTO Info(Id, Name, Address, Subject)
-> VALUES(132, 'Shyam', 'Chandigarh', 'Economics');
Query OK, 1 row affected (0.37 sec)
mysql> SELECT * FROM student_info;
+------+---------+------------+------------+
| id | Name | Address | Subject |
+------+---------+------------+------------+
| 101 | YashPal | Amritsar | History |
| 105 | Gaurav | Chandigarh | Literature |
| 125 | Raman | Shimla | Computers |
| 130 | Ram | Jhansi | Computers |
| 132 | Shyam | Chandigarh | Economics |
+------+---------+------------+------------+
mysql> SELECT * FROM info;
+------+-------+---------+-----------+
| Id | Name | Address | Subject |
+------+-------+---------+-----------+
| 125 | Raman | Shimla | Computers |
| 130 | Ram | Jhansi | Computers |
+------+-------+---------+-----------+
নতুন রো ভিউর ডেফিনিশন মেলেনি, তাই ভিউতে দেখাচ্ছে না (ইনকনসিস্টেন্ট)।
WITH CHECK OPTION সহ ভিউ:
mysql> CREATE OR REPLACE VIEW Info AS
-> SELECT Id, Name, Address, Subject
-> FROM student_info WHERE Subject = 'Computers' WITH CHECK OPTION;
Query OK, 0 rows affected (0.06 sec)
বৈধ রো ইনসার্ট (অনুমোদিত):
mysql> INSERT INTO Info(Id, Name, Address, Subject)
-> VALUES(133, 'Mohan', 'Delhi', 'Computers');
Query OK, 1 row affected (0.07 sec)
mysql> SELECT * FROM info;
+------+-------+---------+-----------+
| Id | Name | Address | Subject |
+------+-------+---------+-----------+
| 125 | Raman | Shimla | Computers |
| 130 | Ram | Jhansi | Computers |
| 133 | Mohan | Delhi | Computers |
+------+-------+---------+-----------+
অবৈধ রো ইনসার্ট (ব্লক করা হয়েছে):
mysql> INSERT INTO Info(Id, Name, Address, Subject)
-> VALUES(134, 'Charanjeet', 'Amritsar', 'Geophysics');
ERROR 1369 (HY000): CHECK OPTION failed