ปัญหาความไม่สอดคล้องของ View และการแก้ไข
Updatable View อาจ Update ข้อมูลที่มองไม่เห็นผ่าน View (เพราะ View แสดงข้อมูลบางส่วน) ทำให้ View Inconsistent
แก้ไขด้วย WITH CHECK OPTION ตอน CREATE/ALTER View: ป้องกัน INSERT/UPDATE แถวที่ไม่ตรงเงื่อนไข View
ไวยากรณ์
CREATE OR REPLACE VIEW view_name AS Select_statement WITH CHECK OPTION;
ตัวอย่าง
ตาราง Student_info ข้อมูล 4 แถว
ไม่ใช้ WITH CHECK OPTION
mysql> CREATE OR REPLACE VIEW Info AS
-> SELECT Id, Name, Address, Subject
-> FROM Student_info
-> WHERE Subject = 'Computers';
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 |
+------+-------+---------+-----------+
แถวใหม่ (Economics) เข้า Table ได้ แต่ไม่見在 View → Inconsistent
ใช้ 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) -- ตรงเงื่อนไข OK
mysql> INSERT INTO Info(Id, Name, Address, Subject)
-> VALUES(134, 'Charanjeet', 'Amritsar', 'Geophysics');
ERROR 1369 (HY000): CHECK OPTION failed -- ไม่ตรงเงื่อนไข Error
WITH CHECK OPTION บังคับให้ข้อมูลที่ INSERT/UPDATE ต้องผ่านเงื่อนไข View