사용이유
- 보안 상 이유
- 누군가가 테이블들을 조회하고자 할 때 미리 데이터를 정리해서 줄 수 있음
- 카디션곱 등으로 디비에 영향을 끼칠 수 있으므로 이를 방지가능
- DBA가 아닌 운영자나 개발자에게 효과적으로 데이터 조회를 가능토록함
- 테이블간의 관계를 몰라도 됨
- 성능
- 쿼리의 컴파일 과정이 생략 되기 때문에 경제적
- compiled query (prepared statement)
- 메모리에 미리 전역변수로 띄워 놓는 것
생성 및 수정
- 뷰를 수정하면 원본 테이블에 영향이 간다.
- 왠만하면 수정의 목적으로는 사용하지 않는다.
CREATE VIEW <뷰 이름> AS
SELECT ...
;
SELECT * FROM <뷰 이름>;
UPDATE <뷰 이름> SET ...;
업데이트가 불가능한 뷰
- 유니크하게 로우를 선택할 수 없는 경우 수정불가
- 그룹함수를 써서 만든 뷰
- by SUM, AVG...
- UNION ALL
- DISTINCT
- GROUP BY
SELECT * FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = <스키마 이름>
... VIEW_DEFINITION ... IS_UPDATABLE ...
... ... ... YES <- 업데이트 가능한 뷰