보다
보다
- 데이터베이스에 존재하는 가상 테이블입니다.
- 실제 테이블과 같은 행과 열이 있지만 데이터를 직접 저장하지는 않습니다.
- 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; # 실제 데이터도 바뀌는지 확인. 바뀌었음!