뷰(View)
- 가상의 테이블을 생성
- 실제 테이블처럼 행과 열을 가지고 있지만, 데이터를 직접 저장하고 있지는 않음
뷰를 만드는 이유
- sql 코드를 간결하게 만들기 위함
- 삽입, 삭제, 수정 작업에 제한 사항을 가짐
- 내부 데이터를 전체 공개하고 싶지 않을 때
뷰 만들기
create view 뷰이름 as 쿼리 ...;
create view vw_member as select userid, username, hp, gender from member;
select * from vw_member;
userid |
username |
hp |
gender |
apple |
김사과 |
01011111111 |
남자 |
banana |
반하나 |
01022222222 |
남자 |
berry |
배예리 |
01099999999 |
여자 |
grapes |
김포도 |
01055555555 |
여자 |
melon |
김멜론 |
01044444444 |
남자 |
orange |
오렌지 |
01033333333 |
여자 |
뷰 수정하기
alter view 뷰이름 as 쿼리 ...;
alter view vw_member as select userid, username from member;
select * from vw_member;
userid |
username |
apple |
김사과 |
banana |
반하나 |
berry |
배예리 |
grapes |
김포도 |
melon |
김멜론 |
orange |
오렌지 |
뷰 대체하기
create or replace view 뷰이름 as 쿼리 ...;
create or replace view vw_member as select userid, username, gender from member;
select * from vw_member;
userid |
username |
gender |
apple |
김사과 |
남자 |
banana |
반하나 |
남자 |
berry |
배예리 |
여자 |
grapes |
김포도 |
여자 |
melon |
김멜론 |
남자 |
orange |
오렌지 |
여자 |
뷰 삭제하기
drop view 뷰이름;
drop view vw_member;
# 뷰를 삭제했으므로 오류
select * from vw_member; # Error Code: 1146. Table 'kdt.vw_member' doesn't exist
뷰 업데이트
create view vw_member as select userid, username, hp,gender from member; # 뷰 생성
update vw_member set hp = '01012341234' where userid = 'berry'; # 전화번호 수정
select * from vw_member where userid = 'berry';
userid |
username |
hp |
gender |
berry |
배예리 |
01012341234 |
여자 |
select hp from member where userid = 'berry'; # 실제 테이블에서도 수정됨
뷰 추가하기
# 테이블 not null 제약조건으로 인해 데이터 삽입이 안됨
# 추가하고 싶다면 실제 테이블에서 not null 제약조건을 없애던가, 실제 테이블에서 not null 제약조건을 가진 컬럼을 view에 추가해야됨
insert into vw_member values ('avocado', '안가도', '01088888888', '남자'); # Error Code: 1423. Field of view 'kdt.vw_member' underlying table doesn't have a default value