안녕하세요, 혼자 공부하는 SQL를 보고 학습한 자료를 남깁니다.
뷰 개체란
데이터베이스 개체 중 하나
바로가기 아이콘과 비슷
실체가 없다.
테이블은 진짜 데이터가 있고, 뷰를 만들면 실체가 없다.
하지만 실재 테이블로 접근이 가능한 것이다.
뷰는 가상의 테이블이다.
테이블이라고 보아도 크게 무방하다.
뷰 설명
뷰를 만드는 형식은 다음과 같습니다.
SELECT문을 사용을 해서 똑같이 VIEW를 만들 수 있다.
뷰의 작동 원리
VIEW를 SELECT를 하면 실제 테이블의 결과를 조회해준다.
가상의 테이블이라고 한다.
VIEW에는 진짜 데이터가 없고, SELECT문만 존재한다.
실습
다음과 같이 먼저 market_db에 있는 member에서 테스트를 한다.
VIEW 이름을 v_member로 만든 이유는
v_를 붙여야 view인지 아니면 table인지 알 수 있기 때문이다.
다음은 VIEW를 만들어서 조회를 한 결과이다.
VIEW를 접근하는데 WHERE절로도 접근이 가능하다.
기존에 테이블에 접근했던 것과 동일하게 접근이 가능하다.
뷰를 사용하는 이유
1) 보안(Security)에 도움이 됩니다.
v_member 뷰에는 사용자의 아이디, 이름, 주소만 있을 뿐 사용자의 중요한 개인 정보인 연락처, 평균 키, 데뷔 일자 등의 정보는 들어 있지 않다. (정보를 가림), 실제 중요한 정보는 공개를 하지 않는 것이다.
예를 들어, 아르바이트생이 회원 정보를 수정하고 싶다. 다른 정보까지 보게 되면 '개인정보유출'이 된다. 그래서 아르바이트생이 뷰만 접근하게 만드는 것이다.
사용자는 뷰에만 접근할 뿐 실제 테이블에는 접근을 할 수 없다.
2) 복잡한 SQL을 단순하게 만들 수 있다.
복잡한 쿼리를 VIEW로 만들면
간단한 SELECT문으로 접근이 가능하다.
이렇게 조인한 테이블을
VIEW로 만들어서
단순하게 SELECT문으로 조회가 가능하도록 만들었다.
WHERE절로 접근이 가능하다.
다음은 그 결과이다.
뷰의 실제 작동
열 이름을 바꾸어서 VIEW를 만들 수 있다.
띄어쓰기가 들어간 열을 조회할 때는 `(백틱)을 써서 조회가 가능하다.
VIEW 수정을 위해서는 ALTER VIEW 명령어를 통해서 수정이 가능하다.
별칭으로 열의 이름을 한글로 사용을 해서 조회한 결과이다.
열 이름을 한글로 별칭을 통해서 바꾸어서 조회를 하는 것은 권장을 하지는 않는다.
하지만 필요에 따라서는 한글로 열이름을 해서 조회가 가능하다.
DROP VIEW 명령어를 통해서 뷰 삭제가 가능하다.
뷰의 정보 확인
CREATE OR REPLACE VIEW 를 통해서 VIEW가 없으면 생성을 하고, 있으면 바꾼다.
DESCRIBE 를 통해서 뷰 세부정보 확인이 가능하다.
하지만 보시다 싶이 PK는 확인이 안 되는 것을 볼 수 있다.
실제 member 테이블에서는 DESCRIBE 명령어로 PK 확인이 가능한 것을 볼 수 있다.
SHOW CREATE VIEW 명령어를 통해서 사용자가 만든 뷰의 CREATE문을 비슷하게 볼 수 있다.
Form Editor를 통해서 이렇게 확인이 가능하다.
뷰의 데이터 수정 작업
다음은 v_member의 데이터를 UPDATE한 결과이다.
정상적으로 UPDATE 되는 것을 볼 수 있다.
INSERT를 실패한 것을 볼 수 있다.
NOT NULL 제약조건이 존재하기 때문이다.
해결하는 방법은 NOT NULL 제약조건의 컬럼들에 DEFAULT 값을 주는 것이다.
일반적으로 VIEW를 통해서 INSERT문을 하는 것은 바람직하지 않다.
키가 167이상인 회원들을 VIEW로 만들어보았다.
이번에는 v_height167에서 키가 167보다 작은 회원들을 삭제를 해보았다.
정상적으로 처리가 되는 것을 볼 수 있다. 총 0건의 데이터가 처리되었다.
INSERT문이 정상적으로 처리가 되었다. 조건이 맞았기 때문이다.
하지만 뷰에서는 조회가 되지 않는다.
바람직하지는 않다.
WITH CHECK OPTION의 사용
그래서 WITH CHECK OPTION을 사용을 하면
167미만은 뷰에 INSERT가 불가능하다.
그래서 다음과 같이 키가 140인 텔레토비 회원은 뷰에 INSERT가 안 되는 것을 볼 수 있다.
WITH CHECK OPTION이 훨씬 더 안정적인 상황이고 일반적이다.
참조하고 있는 실제 테이블이 지워진 경우
이번에는 member, buy 테이블을 지워보겠다.
그리고 나서 다시 v_height167 뷰를 조회를 하면 오류가 나는 것을 볼 수 있다.
뷰가 참조하고 있는 테이블을 지웠기 때문이다.
뷰가 참조하고 있다고 해서 테이블이 안 지워지는 것은 아니다.
CHECK TABLE
CHECK TABLE v_height167; 명령어를 통해서 뷰가 왜 조회가 안되는지 체크가 가능하다.
Msg_text에 뷰가 참조하는 실제 테이블이 없다고 나온다.
만약 뷰 조회가 안된다면 CHECK TABLE을 통해서 확인이 가능하다.
감사합니다.
https://www.youtube.com/watch?v=JrXWxku7ZIM&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=15
'SQLD' 카테고리의 다른 글
[혼자 공부하는 SQL] 인덱스의 개념과 장단점, 클러스터형 인덱스와 보조 인덱스 (1) | 2024.10.27 |
---|---|
[혼자 공부하는 SQL] 인덱스의 개념과 장단점, 클러스터형 인덱스와 보조 인덱스 (0) | 2024.10.27 |
[혼자 공부하는 SQL] SQL 테이블 제약조건 (기본키, 외래키, 고유키) (0) | 2024.10.26 |
[혼자 공부하는 SQL] GUI 환경에서 테이블 생성하기, SQL로 테이블 만들기 (0) | 2024.10.26 |
[혼자 공부하는 SQL] SQL 프로그래밍 (IF문, CASE문, WHILE문, 동적 SQL) (0) | 2024.10.25 |