728x90
반응형
SMALL

뷰(View)

    - 가상의 테이블을 생성
    - 실제 테이블처럼 행과 열을 가지고 있지만 데이터를 직접 저장하고 있지는 않음   

뷰를 만드는 이유

    - sql 코드를 간결하게 만들기 위함 
    - 삽입, 삭제, 수정 작업에 제한 사항을 가짐
    - 내부 데이터를 전체 공개하고 싶지 않을 때

 

목차:

  1. 만들기
  2. 수정하기
  3. 삭제하기
  4. 확인

 

 

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

+ Recent posts