MySQL 뷰가 일관되지 않을 수 있는 부분은 어디이며 일관성을 보장하는 방법은 무엇입니까?

PHPz
풀어 주다: 2023-09-17 12:33:04
앞으로
899명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿