보다
- 가상 테이블 생성
- 실제 테이블과 같은 행과 열이 있지만 데이터를 직접 저장하지는 않습니다.
보기를 만드는 이유
- SQL 코드를 단순화하려면
- 삽입, 삭제 및 편집 작업에 대한 제한 사항
- 내부 데이터의 완전한 공개를 원하지 않는 경우
현재 회원 테이블
select * from member;

보기 만들기
# create view 뷰이름 as 쿼리 ...
create view vw_member as select userid, username, hp, gender from member;
select * from vw_member;

문제
- 회원 프로필의 userid, username, ps, mbti를 출력하는 뷰(vw_memberprofile) 생성 및 선택 전용 멜론 계정 생성
프로파일 테이블
select * from profile;

create view vw_memberprofile
as select m.userid, m.username, m.hp, p.mbti from member as m
inner 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';
flush privileges;
Melon 계정을 생성하고 kdt 데이터베이스에서 vw_memberprofile 보기에 대한 선택된 액세스 권한을 부여하십시오.
멜론 데이터베이스를 생성하고 연결합니다.

use kdt;
select * from member; # Error Code: 1142. SELECT command denied to user 'melon'@'localhost' for table 'member'
select * from vw_memberprofile;

melon 계정은 member 테이블에 대한 권한이 없는데 vw_memberprofile의 select 문이 정상적으로 작동하여 오류가 발생합니다.
보기 변경, 바꾸기
- 보기 변경은 alter로 가능하지만 일반적으로 새로 만들기 위해 replace로 대체됩니다.
# 뷰 수정
# alter view 뷰이름 as 쿼리 ...
# 뷰 대체
# create or replace view 뷰이름 as 쿼리 ...
create or replace view vw_memberprofile
as select m.userid, m.username, m.hp, p.mbti from member as m
inner join profile as p on m.userid = p.userid;
생성 또는 교체로 뷰가 이미 존재하더라도 교체되기 때문에 오류가 발생하지 않습니다.
update vw_member set hp='01000000000' where userid='berry';
select * from vw_member; # 뷰 전화번호 데이터 변경됨
select * from member;


업데이트로 보기가 수정되면 참조하는 기존 테이블도 영향을 받습니다.
insert into vw_member values('avocado', '안가도', '01088888888', '남자'); # Error Code: 1423. Field of view 'kdt.vw_member' underlying table doesn't have a default value
뷰에 삽입할 때 null이 아닌 열의 값을 받지 못하기 때문에 대부분의 오류가 발생합니다.
예외적으로 모든 보기 열에 0이 아닌 열이 있는 경우 가능합니다.
보기 삭제
# drop view 뷰이름;
drop view vw_member;