Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ความสอดคล้องของ MySQL View และ WITH CHECK OPTION

ปัญหาความไม่สอดคล้องของ 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