Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL 보기가 일관성이 없을 수 있는 부분과 일관성을 어떻게 보장할 수 있습니까?


업데이트 가능한 뷰의 경우 테이블의 일부 데이터만 표시하는 뷰를 생성하기 때문에 뷰를 통해 보이지 않는 데이터를 업데이트할 가능성이 큽니다. 이러한 종류의 업데이트는 보기를 일관되지 않게 만듭니다. WITH CHECK OPTION을 사용하여 보기의 일관성을 보장할 수 있습니다. 보기를 생성하거나 수정하는 동안 WITH CHECK OPTION 절은 CREATE VIEW 문의 선택 사항이지만 뷰의 일관성을 유지하는 데 매우 유용합니다.

기본적으로 WITH CHECK OPTION 절은 뷰를 통해 볼 수 없는 행을 업데이트하거나 삽입하는 것을 방지합니다. 간단한 의미에서 우리는 WITH CHECK OPTION 절을 사용한 후에 MySQL이 뷰의 정의에 의해 삽입 또는 업데이트 작업이 확인되도록 보장한다고 말할 수 있습니다. 다음은 WITH CHECK OPTION 절의 구문입니다. -

구문

View_name 보기를 선택하거나 CHECK OPTION으로 만들기 또는 바꾸기

예시

위의 개념을 설명하기 위해 'Student_info' 테이블의 다음 데이터를 사용합니다 -

mysql> 선택 * from student_info;+------+------+------------+--------- ---+| 아이디 | 이름 | 주소 | 제목 |+--------+---------+------------+------------+| 101 | 야쉬팔 | 암리차르 | 역사 || 105 | 가우라프 | 찬디가르 | 문학 || 125 | 라만 | 심라 | 컴퓨터 || 130 | 램 | 잔시 | 컴퓨터 |+------+---------+------------+------------+4행 세트 (0.08초)

이제 다음 쿼리의 도움으로 뷰 이름 'Info'를 만듭니다. 여기에서는 WITH CHECK OPTION을 사용하지 않습니다.

mysql> VIEW Info AS 생성 또는 교체 학생 정보에서 ID, 이름, 주소, 제목 선택 WHERE Subject ='Computers';Query OK, 영향을 받는 행 0개(0.46초)mysql> 정보에서 * 선택;+---- --+----+---------+-----------+| 아이디 | 이름 | 주소 | 제목 |+------+-------+---------+----------+| 125 | 라만 | 심라 | 컴퓨터 || 130 | 램 | 잔시 | 컴퓨터 |+------+-------+---------+----------+2행 세트(0.00초) 

우리는 WITH CHECK OPTION을 사용하지 않았으므로 정의와 일치하지 않더라도 'Info'에 새 행을 삽입/업데이트할 수 있습니다. 다음 쿼리와 그 결과에 설명되어 있습니다. -

mysql> INSERT INTO Info(Id, Name, Address, Subject) values(132, 'Shyam','Chandigarh', 'Economics');Query OK, 1행 영향(0.37초)mysql> Select * from student_info;+--------+---------+------------+------------+| 아이디 | 이름 | 주소 | 제목 |+--------+---------+------------+------------+| 101 | 야쉬팔 | 암리차르 | 역사 || 105 | 가우라프 | 찬디가르 | 문학 || 125 | 라만 | 심라 | 컴퓨터 || 130 | 램 | 잔시 | 컴퓨터 || 132 | 샴 | 찬디가르 | 경제학 |+------+---------+------------+------------+5행 세트 (0.00초)mysql> 정보에서 * 선택;+------+----+------+--------+| 아이디 | 이름 | 주소 | 제목 |+------+-------+---------+----------+| 125 | 라만 | 심라 | 컴퓨터 || 130 | 램 | 잔시 | 컴퓨터 |+------+-------+---------+----------+2행 세트(0.00초) 

위의 결과 집합은 새 행이 'Info'의 정의와 일치하지 않아 보기에 표시되지 않음을 보여줍니다. 이제 다음 쿼리에서 동일한 뷰 'Info'를 생성합니다.

'WITH CHECK OPTION' 사용 -

mysql> VIEW 정보 생성 또는 바꾸기 학생 정보에서 ID, 이름, 주소, 제목 선택 WHERE Subject ='Computers' WITH CHECK OPTION;Query OK, 영향을 받는 행 0개(0.06초)

이제 뷰 'Info'의 정의와 일치하는 행을 삽입하려고 하면 MySQL은 그렇게 하도록 허용합니다. 다음 쿼리와 그 결과에서 지울 수 있습니다.

mysql> INSERT INTO Info(Id, Name, Address, Subject) values(133, 'Mohan','Delhi','Computers');Query OK, 1행 영향(0.07초)mysql> 정보에서 * 선택;+-----+-------+---------+----------+| 아이디 | 이름 | 주소 | 제목 |+------+-------+---------+----------+| 125 | 라만 | 심라 | 컴퓨터 || 130 | 램 | 잔시 | 컴퓨터 || 133 | 모한 | 델리 | 컴퓨터 |+------+-------+---------+----------+3행 세트(0.00초) 

하지만 'Info' 보기의 정의와 일치하지 않는 행을 삽입하려고 하면 MySQL이 허용하지 않고 오류가 발생한다고 가정합니다. -

mysql> INSERT INTO Info(Id, Name, Address, Subject) 값(134, 'Charanjeet','Amritsar','Geophysics');ERROR 1369(HY000):CHECK OPTION 실패