Day13_MYSQL_View
2023. 3. 21. 13:00ㆍSQL
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 |