데이터베이스 개체중 하나로 데이터베이스 개체 중에서도 테이블과 밀접한 연관이 있다.
한 번 생성된 뷰는 일반 테이블과 거의 동일한 개체로 취급할 수 있다.
하지만 뷰는 테이블처럼 데이터를 가지고있지 않고, 뷰의 실체는 select문 이다.
뷰에 접근하면 select문이 실행되고 그 결과가 화면에 출력되는 방식으로 윈도우의 '바로가기 아이콘'과 유사하다.
뷰의 종류에는 두가지 종류가 있다.
- 단순 뷰 : 하나의 테이블과 연관된 뷰
- 복합 뷰 : 두개 이상의 테이블과 연관된 뷰
뷰의 개념
use market_db;
select mem_id, mem_name, addr from member;
select문으로 mem_id, mem_name, addr을 조회하면 3개의 컬럼을 가진 테이블과 유사한 형태가 조회된다.
select문의 실행 결과를 하나의 테이블 처럼 사용하는 것이 뷰의 개념이다.
따라서 뷰의 실체는 select문이며 일반적으로 뷰의 이름만 보고도 뷰인지 알아볼 수 있도록 이름 앞에 v_를 붙이는 것이 일반적이다.
뷰의 생성 방식
create view 뷰_이름
as
select문;
뷰에 접근하는 방식
테이블과 동일하게 select문으로 접근할 수 있고 필요하다면 조건식도 테이블과 동일하게 사용할 수 있다.
select 열_이름 from 뷰_이름 where 조건;
뷰 생성하기
create view v_member
as
select mem_id, mem_name, addr from member;
뷰 사용하기
select * from v_member;
필요한 열만 보거나 조건식을 이용해서 뷰 사용하기
select mem_name, addr from v_member where addr in("서울", "경기");
뷰는 테이블에 접근한 것과 동일한 결과를 얻을 수 있다.
뷰의 작동
- 조회 또는 변경
- 뷰에서 테이블로 쿼리 실행
- 뷰에서 쿼리 결과값 받기
- 사용자에게 결과 전달
뷰를 사용하는 이유
- 보안(security)에 도움이 되기 때문이다.
ex)만약 인터넷 마켓 회원의 데이터를 확인하는 작업을 하는데 아르바이트생을 고용할 계획이라면 아르바이트생이 회원 테이블 데이터에 접근하도록 한다면 중요한 개인 정보들이 노출될 가능성이 있다.
하지만 회원 테이블에 접근하지 못한다면 일을 할 수 없다.
따라서 이러한 경우에 작업에 필요한 데이터만 확인할 수 있는 뷰를 생성해서 아르바이트생의 회원테이블에 접근 권한을 제한하고 뷰의 접근 권한을 준다면 문제를 해결할 수 있다. - 복잡한 sql을 단순화 할 수 있다.
만약 복잡한 쿼리를 자주 사용해야 한다면 매번 쿼리를 입력하기 힘들기 때문에 이 sql을 뷰로 생성해두고 사용자들이 뷰에 접근할 수 있도록 한다면 복잡한 sql을 입력할 필요가 없어진다.
뷰의 실제 작동
뷰의 실제 생성, 수정, 삭제
뷰를 생성하면서 뷰에서 사용될 열 이름을 테이블과 다르게 지정할 수 있다(별칭을 사용한다)
별칭은 열 이름 뒤에 작은 따옴표 혹은 큰따옴표로 묶어주고 as를 붙여 코드를 명확하게 보여준다.
단, 뷰를 조회할 때 열 이름에 공백이 있다면 백틱(``)으로 묶어줘야 한다.
create view v_viewtest1
as
select b.mem_id 'Member ID', m.mem_name as "Member Name", b.prod_name "Product Name"
, concat(m.phone1, m.phone2) as "Office Phone"
from buy b
inner join member m
on m.mem_id = b.mem_id;
select distinct `member ID`, `member Name` from v_viewtest1;
뷰의 수정은 alter view 구문을 사용한다.
alter view v_viewtest1
as
select b.mem_id '회원 아이디', m.mem_name as '회원 이름', b.prod_name "제품 이름"
, concat(m.phone1, m.phone2) as "연락처"
from buy b
inner join member m
on m.mem_id = b.mem_id;
○ 열 이름에 한글을 사용하면 한글 운영 체제 외에는 인식이 안될 수 있으므로 권장하지는 않는다.
뷰의 삭제
뷰를 삭제시킬때는 테이블을 삭제시키는 것과 동일하게 drop을 사용해서 삭제시킨다.
drop view v_viewtest1;
뷰의 정보 확인
describe로 뷰의 정보를 확인할 수 있지만 primary key 같은 옵션들 정보는 확인되지 않는다.
describe v_viewtest2;
뷰의 소스코드 확인
show create view v_viewtest2;
뷰를 통한 데이터의 수정 및 삭제
view 에서 데이터를 수정하면 원본 데이터에 수정이 가해진다.
update v_member set addr = '부산' where mem_id = 'BLK';
select * from v_member;
select * from member;
뷰가 참조하는 테이블 삭제
뷰가 참조하는 테이블이 있더라도 테이블은 삭제될 수 있다.
drop table if exists buy, member;
현재 여러개의 뷰가 두 테이블과 관련이 있음에도 테이블이 삭제되는것을 확인할 수 있다.
만약 테이블을 삭제시킨 후에 뷰를 조회하면 뷰를 조회할 수 없다는 메세지가 출력된다.
select * from v_height167;
이러한 경우에는 check table로 테이블의 삭제 유뮤를 확인할 수 있다.
check table v_height167;
복합 뷰
두개 이상의 테이블로 만든 뷰로 주로 두 테이블을 join한 결과를 뷰로 만들 때 사용한다.
참고로 복합뷰는 읽기 전용으로 복합 뷰를 통해 테이블에 데이터를 입력/삭제/수정을 할 수없다.
'데이터베이스' 카테고리의 다른 글
| MySQL 스토어드 함수 (0) | 2023.05.26 |
|---|---|
| MySQL 인덱스 (1) | 2023.05.26 |
| MySQL 제약조건 (0) | 2023.05.26 |
| MySQL 테이블 (1) | 2023.05.26 |
| MySQL 동적sql (0) | 2023.05.26 |