select를 한 결과를 가상 테이블에 저장한 것
가상 테이블이 뷰임
=> 하나의 테이블에 대하여 서로 다른 관점으로 보기 원할때,
=> 일반 사용자에게는 감추어야할 컬럼이 있을때 그것을 제외하고 뷰를 만들어 제공하여 보안 유지
=> 자주 사용하는 복잡한 질의문을 미리 뷰로 정의하여 두고 간편하게 사용할 때
=> 물리적인 데이터를 갖지 않음
=> 뷰 갱신연산은 경우에따라 실행(view에 정의된 것)될 수 도 안될(뷰에 정의되지 않은 값 ex) not null인데 null입력) 수도 있음
- 뷰 생성
CREATE VIEW 뷰이름 AS SELECT 칼럼이름 FROM 테이블이름 WHERE 조건;
EX) CREATE VIEW v1 AS SELECT name, age FROM tb1;
SELECT * FROM v1;
- 뷰에서 칼럼 값 변경
뷰는 참조 테이블의 일부분을 표시함
따라서 참조 테이블의 값이 변경되면 뷰의 값도 변경됨
뷰는 참조 테이블의 일부분을 표시하면서 참조테이블의 데이터 창구이기도 함
따라서 뷰의 값이 변경되면 참조 테이블의 값도 변경됨
ex) UPDATE v1 SET name='주임 강신우' WHERE name='강신우';
- 뷰에서 INSERT ??
뷰는 가상테이블이므로, 뷰에 INSERT하는 것은 테이블의 일부에만 데이터를 추가하게 되는 것임
값을 추가하지 않은 칼럼은 default 값이 입력된다.
UNION이나 JOIN, 하위질의를 사용하는 뷰에선 INSERT나 UPDATE를 사용할 수 없다.
- 뷰의 조건에 맞지 않는 값 뷰에 추가
ex) create view v3 as select number, sales from tb where sales>=100;
sales가 100이상인 조건의 뷰 v3를 만들고 v3에 sales가 100보다 작은 값을 넣으면 어떻게 될까?
INSERT INTO v3 VALEUS('test', 90);
SELECT * FROM v3; ==> 기존과 동일하게 보인다.
SELECT number, sales FROM tb1; ==> test, 90이라는 값이 추가된 것을 알 수 있다.
- 뷰의 조건에 맞지 않는 값 뷰에 추가시 제한걸기
create view v4 as create number, sales from tb where sales>100 with check option;
뷰 생성시 with check option을 추가하면 조건에 맞지 않는 데이터를 추가하지 못하게 한다.
위 예에선 sales가 100이하인 값을 추가하지 못하게 된다.
- 뷰 덮어쓰기
이미 같은 이름의 뷰가 존재할때 덮어쓰기하여 뷰를 생성
CREATE OR REPLACE VIEW v1 AS select now();
와 같이 CREATE OR REPLACE VIEW라고 해주면 된다.
그러면 기존 뷰 v1은 삭제되고 now를 표시하는 새로운 뷰 v1이 생성된다.
뷰의 존재 여부에 상관없이 뷰를 생성할 수 있게 해주는 방법이다.
- 뷰 칼럼 구조 변경
ALTER VIEW 뷰이름 AS SELECT 칼럼이름 FROM 테이블이름;
EX) ALTER VIEW v1 AS SELECT name, age FROM tb1;
- 뷰 삭제
DROP VIEW 뷰이름;
*삭제할 뷰가 없는 경우 오류가 발생하므로 IF EXISTS 사용
ex) DROP VIEW IF EXISTS v1;
'공부 > 데이터베이스' 카테고리의 다른 글
뷰 예제 (0) | 2021.05.15 |
---|---|
저장 프로시저 (0) | 2021.05.15 |
데이터베이스 예제 4 (0) | 2021.04.20 |
데이터베이스 예제 3 (0) | 2021.04.20 |
데이터베이스 예제 2 (0) | 2021.04.20 |