개발/DB(MariaDB)

11. DB - (VIEW)

oneidsin 2025. 3. 17. 18:15

VIEW

뷰는 여러 테이블을 모아서 만든 가상의 테이블이다.

복잡한 조인이나 서브쿼리를 이용해 한번 만들어 두면, 이후 사용자들은 편리하게 사용할 수 있다.

뷰는 자신만의 인덱스를 가질 수 없다.

 

1) 뷰 생성 문법

-- CREATE [OR REPLACE] VIEW [view name] AS [sub query]
-- or replace : 중복되는 이름이 있을 경우 뷰를 덮어 쓴다
-- 서브쿼리 내용을 변경하고 싶을 때 주로 사용

create view vw_emp as
	select e.ename, d.deptname from emp e, dept d where e.deptno = d.deptno;
    
-- 이제 복잡한 서브쿼리 없이 데이터를 확인할 수 있다
select * from vw_emp;

 

2) 뷰에서 보이는 데이터를 수정하면 원본도 같이 수정됨

select * from vw_emp v;

-- kim 을 oh 로 수정하기
update vw_emp set ename = 'oh' where ename = 'kim';
select * from emp;

 

4) 뷰의 수정(서브쿼리 변경) - ALTER TABLE 로도 수정 가능? YES

-- or replace 는 수정 및 생성까지 가능
create or replace view vw_emp as
	select e.ename, d.deptname, d.loc from emp e
	join dept d on e.deptno = d.deptno;

 

5) 뷰 정보 확인

show create view vw_emp; -- 뷰의 구성 쿼리를 확인 가능
show full tables where table_type = 'VIEW'; -- 모든 뷰를 확인할 수 있음(항목만 가능)

 

6) with check option : 뷰를 생성하는 조건식을 만족하는 컬럼은 update 할 수 없도록 하는 옵션

create or replace view vw_chk as 
	select ename, job, hiredate, deptno from emp where deptno = 1;
    
-- with check option 이 없으면 뷰를 구성하는 기준 컬럼인 deptno 의 수정이 가능해진다
-- 이로 인해 데이터의 수정 발생시 뷰의 갯수가 달라지게 된다
update vw_chk set deptno = 2 where ename = 'lee';

create or replace view vw_chk as 
	select ename, job, hiredate, deptno from emp where deptno = 1 with check option;

-- CHECK OPTION failed `mydb`.`vw_chk`
update vw_chk set deptno = 2 where ename = 'oh';

 

7) 뷰 삭제

show full tables where table_type = 'VIEW';
drop view vw_emp;
drop view vw_chk;

'개발 > DB(MariaDB)' 카테고리의 다른 글

13. DB - (LIMIT)  (0) 2025.03.18
12. DB - (auto_increment)  (0) 2025.03.18
10. DB - (INDEX)  (0) 2025.03.17
9. DB - (EXISTS, ANY, ALL)  (0) 2025.03.17
8. DB - (JOIN)  (0) 2025.03.17