본문 바로가기
DataBase/MySQL

[MySQL] 뷰(View)에 대해 알아보자! 🧐

by coding-choonsik 2023. 3. 21.
728x90
반응형
SMALL

1. 뷰(view)란 ❓

  • 가상의 테이블을 생성
  • 실제 테이블처럼 행과 열을 가지고 있지만, 데이터를 직접 저장하고 있지는 않음
  • 다른 테이블이나 다른 뷰에 저장되어 있는 데이터를 보여주는 역할만 수행

1-1. 뷰를 만드는 이유

  • SQL 코드를 간결하게 만들기 위함
  • 삽입, 삭제, 수정 작업에 제한 사항을 가짐(특정 사용자한테는 뷰에대한 권한만 주거나 할 수 있음)
  • 내부 데이터를 전체 공개하고 싶지 않을 때

1-2. 뷰의 장점

  • 특정 사용자에게 테이블 전체가 아닌 필요한 필드만을 보여줄 수 있음(보안)
  • 복잡한 쿼리를 단순화
  • 쿼리를 재사용할 수 있음

 

1-3. 뷰의 단점

  • 한 번 정의된 뷰는 변경할 수 없음
  • 삽입, 삭제, 갱신 작업에 많은 제한 사항을 가짐
  • 자신만의 인덱스를 가질 수 없음

 


2. 뷰 생성, 수정, 대체, 삭제

2-1. 뷰 생성하기

create view 뷰이름 as 쿼리, ...
📍 뷰는 원본 테이블과 같은 이름을 가질 수 없다.

 

✅ member 테이블의 userid, username, hp, gender 컬럼만 뽑아 뷰로 설정해보자.

select userid, username, hp, gender from member;  -- 뷰로 생성

create view vw_member as select userid, username, hp, gender from member;

select * from vw_member;


member의 userid, username, hp와 profile의 mbti를 출력하는 view(vw_memberprofile)를 만들어보자.

 

 

select m.userid, m.username, m.hp, p.mbti from member as m 
left outer join profile as p 
on m.userid = p.userid;  -- 원하는 컬럼들을 join하여 보기

# 뷰로 생성
create view vw_memberprofile as 
select m.userid, m.username, m.hp, p.mbti from member as m 
left outer join profile as p 
on m.userid = p.userid;


2-2.  뷰 대체하기

# 해당 뷰가 존재하지 않으면 CREATE VIEW 문과 같은 결과를 반환
create or replace view 뷰이름 as 쿼리...

✅ 위의 vw_memeberprofile 뷰를 대체하기

create or replace view vw_memberprofile as 
select m.userid, m.username, m.hp, p.mbti from member as m 
left outer join profile as p 
on m.userid = p.userid;

2-3. 뷰 수정하기

alter view 뷰이름 as 쿼리 ...

 

✅ 위 vw_memberprofile 뷰에서 mbti를 빼고 height 필드로 수정해보자.

alter view vw_member as 
select m.userid, m.username, m.hp, p.height from member as m 
left outer join profile as p 
on m.userid = p.userid;


2-4. 뷰 삭제하기

drop view 뷰이름;

 

✅ 위 vw_memberprofile 뷰를 삭제해보자.

drop view vw_memberprofile;

 # select * from vw_memberprofile;  
 -- Error Code: 1146. Table 'kdt.vw_memberprofile' doesn't exist

 

 

728x90
반응형
LIST