SQL View 생성 및 갱신 0 3 2,137

by minmax [SQL Query] sql view [2022.08.17 17:54:05]


안녕하세요. 아래와 같이 view 생성 시 해당 테이블(cs)에 
조건을 만족하는 값이 없다면, 뷰가 정상적으로 생성이 되나요?

create view cs_view as
select id, value from cs
where value > 1000;

그리고 만약 뷰가 공집합으로 생성이 된다면, 삽입 쿼리가 가능한지요?

 

by 마농 [2022.08.17 18:02:38]

뷰는 데이터가 아니라 쿼리입니다.
해당 쿼리로 뷰가 생성되고
뷰를 조회하면 해당 쿼리가 실행되는 것입니다.
공집합으로 생성이 되었다고 생각하면 안되고 그냥 쿼리가 저장된 것입니다.
뷰를 통한 Insert 도 가능합니다.
질문의 뷰는 WITH CHECK OPTION 이 없으므로 아무 값이나 입력 가능한데.
만약 WITH CHECK OPTION 구문이 있다면 1000 초과하는 값만 입력 가능합니다.
http://gurubee.net/lecture/1036


by minmax [2022.08.17 19:49:43]

 

답변 감사합니다.

조건에 만족하는 데이터가 없어도 정상적으로

뷰 생성과 삽입 쿼리가  실행이 된다는 말씀이시군요.

저도 그렇게 알고 있는데,

책에서는 삽입 쿼리가 거절된다고 나와서 질문을 하였습니다.

with check option은 작성되지 않았습니다.

테이블에 기본키가 아닌 not null로 설정된 키가 있는데, 

해당 키가 뷰 생성 시 선택되지 않고, 삽입 때 해당 키의 값이 없다보니 

오류가 난다고 하는 것 같은데요. 맞을까요?


by 마농 [2022.08.17 22:31:00]

궁금하면 직접 뷰 생성하고 자료 입력해 보면 됩니다.
책이나 질문/답변 만으로는 모든 궁금증을 해결 할 수는 없습니다.

책에서는 보통 기본적인 개념만 알려줍니다.
다양한 케이스별 결과는 직접 테스트 해보셔야 합니다.
각각의 케이스 마다 결과는 다르게 나올 것입니다.

위에 언급 된 케이스는 NOT NULL 컬럼이 뷰에 포함되지 않은 경우네요.
뷰에 포함되지 않은 컬럼의 값은 입력 자체가 불가능한데
입력이 안되어 NULL 이 들어가면서 에러가 나게 되겠네요.
이는 뷰에 대한 제약이라기 보다는 테이블 자체의 제약사항입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입