집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 뷰가 일관되지 않을 수 있는 부분은 어디이며 일관성을 보장하는 방법은 무엇입니까?
업데이트 가능한 뷰의 경우, 우리가 생성한 뷰는 테이블 데이터의 일부만 표시하기 때문에 뷰를 통해 표시되지 않는 데이터를 업데이트할 가능성이 높습니다. 이 업데이트로 인해 보기가 일관되지 않습니다. 뷰를 생성하거나 수정할 때 WITH CHECK OPTION을 사용하여 뷰의 일관성을 보장할 수 있습니다. WITH CHECK OPTION 절은 CREATE VIEW 문의 선택적 부분이지만 뷰의 일관성을 유지하는 데 매우 유용합니다.
기본적으로 WITH CHECK OPTION 절은 뷰를 통해 표시되지 않는 행을 업데이트하거나 삽입하는 것을 방지합니다. 간단히 말해서, MySQL은 WITH CHECK OPTION 절을 사용한 후 삽입 또는 업데이트 작업이 뷰 정의에 의해 확인되는지 확인한다고 말할 수 있습니다. 다음은 WITH CHECK OPTION 절의 구문입니다. -
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 | +------+---------+------------+------------+ 4 rows in set (0.08 sec)
이제 다음 쿼리의 도움으로 뷰 이름 "Info"를 생성하겠습니다. 여기서는 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> Select * from info; +------+-------+---------+-----------+ | Id | Name | Address | Subject | +------+-------+---------+-----------+ | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | +------+-------+---------+-----------+ 2 rows in set (0.00 sec)
WITH CHECK OPTION을 사용하지 않기 때문에 정의와 일치하지 않더라도 "Info"에 새 행을 삽입/업데이트할 수 있습니다. 아래 쿼리와 그 결과는 이를 보여줍니다.
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 | +------+---------+------------+------------+ 5 rows in set (0.00 sec) mysql> Select * from info; +------+-------+---------+-----------+ | Id | Name | Address | Subject | +------+-------+---------+-----------+ | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | +------+-------+---------+-----------+ 2 rows in set (0.00 sec)
위 결과 집합은 새 행이 "정보" 정의와 일치하지 않으므로 뷰에 표시되지 않음을 보여줍니다. 이제 다음 쿼리에서는 "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)을 사용하여 동일한 "Info" 뷰
를 생성합니다. 이제 "Info" 뷰의 정의와 일치하는 행을 삽입하려고 하면 MySQL은 다음을 허용합니다. 이 작업을 수행. 이는 아래 쿼리와 그 결과를 통해 알 수 있습니다.
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 | +------+-------+---------+-----------+ 3 rows in set (0.00 sec)
하지만 "Info" 뷰의 정의와 일치하지 않는 행을 삽입하려고 하면 MySQL에서 이를 허용하지 않고 오류가 발생한다고 가정해 보세요 -
mysql> INSERT INTO Info(Id, Name, Address, Subject) values(134, 'Charanjeet','Amritsar','Geophysics'); ERROR 1369 (HY000): CHECK OPTION failed
위 내용은 MySQL 뷰가 일관되지 않을 수 있는 부분은 어디이며 일관성을 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!