데이터 베이스 _ 뷰(view)
▤ 목차
✔ 뷰(view)
뷰(view)란 데이터 베이스에 존재하는 가상의 테이블을 말한다. 뷰를 이용해서 실제 테이블처럼 행과 열을 가지고 있지만, 데이터를 저장하고 있지 않는다.
✨장점
- 보안 강화 ) 특정 사용자에게 테이블 전체가 아닌 필요한 자료만 보여줄 수 있다.
- 복잡한 쿼리를 단순화해서 사용할 수 있다.
- 독립성 확보) 사용한 쿼리를 재사용할 수 있다.
- 논리적 테이블을 만들기때문에 메모리 절감 효과가 있다.
✨ 단점
- 삽입, 삭제, 갱신 작업에 많은 제한 사항을 가진다
- 자신만의 인덱스를 가질 수 없다.
⌨ 형식
CREATE [or REPLACE] VIEW [view_name] AS SELECT문;
DROP VIEW view_name;
⌨ 테이블 변경 덮어쓰기 : OR REPLACE
이 명령어를 사용하면 테이블 변경사항을 덮어써준다.
(OR REPLACE 없는 테이블)
create VIEW v_b AS
select * FROM jikwon WHERE jikwon_name LIKE'김%' OR
jikwon_name LIKE '박%';
v_b라는 이름의 뷰테이블을 생성한다. 해당 테이블은 김 혹은 박으로 시작하는 직원만 존재한다.
ALTER TABLE jikwon RENAME sbs;
테이블 이름을 sbs로 변경해보자.
이후 다시 v_b를 조회해보자.
SELECT * FROM v_b;
오류가 뜬다. 다시 이름을 바꿔보자.
ALTER TABLE sbs RENAME jikwon;
SELECT * FROM v_b;
잘 작동하는 것을 알 수 있다.
💻 뷰 테이블 확인하기
SHOW FULL TABLES IN mydb WHERE TABLE_TYPE LIKE 'view';
원하는 데이터베이스에 뷰 테이블을 확인 할 수 있는 쿼리이다.
이렇게 해당 테이블의 타입을 확인할 수 있다.
⌨ 조건이 걸린 데이터만 ram에 가지고 온다.
CREATE VIEW v_c AS SELECT * FROM jikwon ORDER BY jikwon_pay DESC;
SELECT * FROM v_c;
원하는데로 정렬된 뷰를 만들 수 있다.
v_d 테이블
CREATE VIEW v_d AS SELECT jikwon_no AS 번호,jikwon_name 이름,jikwon_pay * 10000 AS 연봉
FROM jikwon ORDER BY jikwon_pay DESC;
칼럼에 별명을 주고 뷰를 만들어줬다. 뷰 테이블을 사용하는 user는 칼럼명을 별명으로 사용해야한다.
SELECT jikwon_no, jikwon_name FROM v_d; -- err
이렇게 직접적으로 칼럼명을 적을 수 없다.
뷰를 생성했을 때 별칭으로 정한 이름이 뷰 칼럼으로 나타나는 것을 확인 할 수 있다.
SELECT 번호, 이름 FROM v_d;
내 ram 공간에는 뷰테이블 (select로 요청한 테이블)만 있다.
💻 뷰 테이블로 뷰만들기
CREATE VIEW v_e AS SELECT * FROM v_d WHERE 연봉 >= 78000000;
SELECT * FROM v_e;
👏 중요
뷰는 마치 실제 테이블처럼 사용된다.
뷰로 새로운 뷰 테이블이 만들어 진다.
😊정리
가상 테이블이다.
기본 테이블은 물리적인 테이블로 디스크에 공간이 할당되어 데이터를 저장한다.
뷰는 데이터 딕셔너리 테이블에 뷰에 대한 SQL문만 저장되어 저장 공간 할당이 이뤄지지 않는다.
전체 데이터 중 일부만 접근할 수있도록 한다. (보안적으로 유리하다.)
- 사용자마다 특정 데이터만 조회할 수 있도록 권한 제한을 둘 수 있다.
뷰를 정의한 기본 테이블에서 정의된 무결성 제약 조건은 그대로 유지된다.