Day13_MYSQL_View

2023. 3. 21. 13:00SQL

 

1) view 생성하기

 

문제

1. 테이블 1(member) 의 userid,username,hp와 테이블2(profile)의 mbti
출력하는 뷰(vw_memberprofile)를 만든다.

2. select만 할 수 잇는 melon계정을 생성
테이블(member,profile) 2개 join
select m.userid,m.username,m.hp,p.mbti from member as m
inner join profile as p
on m.userid = p.userid;

view 생성
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;

계정 생성
create user 'melon'@'localhost' identified by '3333';
grant select on kdt.vw_memberprofile to 'melon'@'localhost';

즉시 적용
flush privileges;

권한 확인
use mysql;
show grants for 'melon'@'localhost';

 


2)view 수정 및 삭제

    방법 1 (단점: 다시 짜는 것과 거의 비슷한 코드)
    alter view 뷰이름 as 쿼리........
    
    방법 2 (대체로 수정을 대신한다.)
    create or replace view 뷰이름 as 쿼리 ...
    
   뷰 삭제하기
    drop view 뷰이름;

 

예시

기존에 있는 vw_member에 데이터 변경 or 추가하기
update vw_member set hp ='010-9999-9999' where userid = 'berry';

 

 

 

예시

vw_member 뷰에 데이터 변경 추가 하기

! 뷰에서 변경,추가를 하면 원본 테이블에도 적용 !

 

update vw_member set hp ='010-9999-9999' where userid = 'berry';
select * from member;

예외사항

 

데이터 추가해보기
오류 발생
해결 방안 : 원래 원본데이터(member에 제약조건에 다 맞거나, null 처리를 해야된다.)

insert into vw_member values ('avocado','안가도','010-8888-8888','남자');

 

 

3) 예시 및 문제

 

1. member(테이블)의 userid,username,hp(데이터)와 profile(테이블2)에 mbti(데이터필드)
를 출력하는 뷰(vw_memberprofile)를 만들어라.

2. vw_memberprofile 을 select만 할 수 잇는 melon계정을 생성

 

select m.userid,m.username,m.hp,p.mbti from member as m
inner 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
inner join profile as p
on m.userid = p.userid;

create user 'melon'@'localhost' identified by '3333';
grant select on kdt.vw_memberprofile to 'melon'@'localhost';
flush privileges;

use mysql;
select user,host from user;
show grants for 'melon'@'localhost';
해석
1번째 문단 : member의 userid,username,hp 와 profile의 mbti를 1개의 테이블로 join
2번째 문단 : vw_memberprofile 뷰로 만듬 
3번째 문단 : ID : melon@localhost / PW: 3333 (권한: kdt DB의  vw_memberprofile를 select)
4번째 문단: 사용자 계정 조회 

결과

728x90

'SQL' 카테고리의 다른 글

Day13_MYSQL_ truncate 구문  (0) 2023.03.21
Day13_MYSQL_ 트렌섹션(transaction)  (0) 2023.03.21
Day12_MYSQL 문자열 함수  (0) 2023.03.20
Day12_MYSQL_데이터 정규화 + 서브쿼리  (0) 2023.03.20
DAY12_MYSQL 정렬 + limit  (1) 2023.03.20