KDT 수업/MySQL

뷰(View)

니니는 진짜 전설이다 2023. 3. 21. 17:21

View

    뷰(View)

  • 데이터베이스에 존재하는 일종의 가상의 테이블을 의미함
  • 실제 테이블처럼 행과 열을 가지고 있지만, 데이터를 직접 저장하고 있지는 않음
  • MySQL에서 뷰는 다른 테이블이나 다른 뷰에 저장되어 있는 데이터를 보여주는 역할만을 수행함
      즉, 뷰를 사용하면 여러 테이블이나 뷰를 하나의 테이블처럼 볼 수 있다! 

 

    뷰를 만드는 이유

  •  복잡한 SQL코드를 간결하게 만들기 위해
  • 삽입, 삭제, 수정 작업에 제한 사항을 가짐
  • 특정 사용자에게 테이블 전체가 아닌 필요한 필드만을 보여줄 수 있음 
# create view 뷰이름 as 쿼리... 
use kdt;
select * from member;
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를 출력하는 뷰를 만들고 select만 할 수 있는 melon계정을 생성
select * from profile;
select userid, username, hp from member; 
create view vw_memberprofile as select m.userid, m.username, m.hp, p.mbti from member as m left join profile as p on m.userid = p.userid;
select * from vw_memberprofile;

create user 'melon'@'localhost' identified by '1111';
grant select on kdt.vw_memberprofile to 'melon'@'localhost';

# melon으로 접속 후 테스트
use kdt;
select * from member;  #Error Code: 1142. SELECT command denied to user 'melon'@'localhost' for table 'member'
select * from vw_memberprofile;

 

    뷰 수정하기

  •  CREATE 문을 사용하여 생성된 뷰는 ALTER 문을 사용하여 수정할 수 있다
 # alter view 뷰이름 as 쿼리 ...

 

    뷰 대체하기

  • CREATE 문에 OR REPLACE 절을 추가하여 기존에 존재하는 뷰를 새로운 뷰로 대체할 수 있다
# create or replace view 뷰이름 as 쿼리 ...
use kdt;
create or replace view vw_memberprofile as 
select m.userid, m.username, m.hp, p.mbti 
from member as m left join profile as p on m.userid = p.userid;

 

 

    뷰 삭제하기

  • DROP 문을 사용하여 생성된 뷰를 삭제할 수 있다
# drop view 뷰이름;
drop view vw_member;

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

update vw_member set hp='010-9999-9999' where userid='berry';
select * from member;   # 실제 데이터도 바뀌는지 확인. 바뀌었음!