728x90
반응형
SMALL
뷰(View)
- 가상의 테이블을 생성
- 실제 테이블처럼 행과 열을 가지고 있지만 데이터를 직접 저장하고 있지는 않음
뷰를 만드는 이유
- sql 코드를 간결하게 만들기 위함
- 삽입, 삭제, 수정 작업에 제한 사항을 가짐
- 내부 데이터를 전체 공개하고 싶지 않을 때
목차:
- 만들기
- 수정하기
- 삭제하기
- 확인
1. 뷰 만들기
기본 구조:
create view 뷰이름 as 쿼리 ...;
예시:
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 m.userid, m.username, m.hp, p.mbti from member as m left join profile as p on m.userid = p.userid;
# 만들거 미리 확인하기
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;
# 뷰 만들기
create user 'melon'@'localhost' identified by '3333'; # 멜로 계정만들고 비번은 3333
grant select on kdt.vw_memberprofile to 'melon'@'localhost'; # 권한주기
flush privileges; # 바로 적용하게 하기
2. 뷰 수정하기
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 left join profile as p on m.userid = p.userid;
# 뷰 수정
3. 뷰 삭제하기
# drop view 뷰이름;
drop view vw_memberprofile;
4. 뷰에서 데이터 변경가능여부 확인해보기
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_member;
update vw_member set hp='010-9999-9999' where userid='berry';
# 베리 번호 수정하기 # 뷰에서 변경하게 되어도 실제 데이터가 변경됌
insert into vw_member values ('avocado', '안가도', '010-8888-8888', '남자');
# Error Code: 1423. Field of view 'kdt.vw_member' underlying table doesn't have a default value
# 원본테이블에 not null 되어있는게 있어서 insert로 데이터가 들어가지 않는다.
# 해결하고 싶다면 원본에 null 값을 허용을 해주어야함
728x90
반응형
LIST
'DBMS > MySQL' 카테고리의 다른 글
MySQL- 인덱스(index (1) | 2023.03.21 |
---|---|
MySQL- 트랜젝션(Transaction) (0) | 2023.03.21 |
MySQL- 사용자 추가하기 (0) | 2023.03.21 |
MySQL- 데이터 조작(select) (0) | 2023.03.16 |
MySQL- 연산자 (0) | 2023.03.16 |