728x90
사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블이다
특징
- 기본테이블로부터 유도된 테이블이기에 테이블과 같은 형태의 구조이며 조작도 테이블과 거의 같다.
- 가상 테이블이기에 데이터의 논리적 독립성을 제공한다.
- 뷰를 통해서만 데이터를 접근하여 뷰에 나타나지 않는 데이터 보안에 도움.
- 필요한 데이터만 뷰로 정의해서 처리하기에 관리가 용이하고 명령문이 간단함.
- grant문으로 권한 줌
단점
- ALTER VIEW문을 사용할 수 없다. (뷰의 정의를 변경할 수 없다.)
(mysql은 alter문이 되지만 실행이 아니라 새로운 view가 만들어지는 개념)
- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 따른다.
제약조건
- 뷰의 정의는 select 구문이 허용하는 where, group by 와 같은 것을 모두 포함 가능.
- TEMPORARY 뷰를 만들 수 없다.
- 뷰와 함께 연결되는 트리거를 만들 수 없다.
- 뷰 정의에 있는 SELECT 구문은 다음과 같은 구성을 포함할 수 없다.
- FROM 절 안에 서브쿼리
- TEMPORARY 테이블로 참조
- 사용자 변수로 참조
한 번도 로그인하지 않은 사람 뷰 만들기
1. select문 먼저 작성(물리적인 테이블만 사용해야함)
SELECT
m.m_id AS memberId
,m.m_name AS memberName
,m.m_email AS memberEmail
FROM
tb_member AS m
LEFT JOIN
tb_login AS l
ON
m.m_id = l.login_id
WHERE
l.login_id IS NULL;
2. CREATE 구문으로 VIEW 생성 (오브젝트는 DDL)
CREATE VIEW v_sleep_member
AS
SELECT
m.m_id AS memberId
,m.m_name AS memberName
,m.m_email AS memberEmail
FROM
tb_member AS m
LEFT JOIN
tb_login AS l
ON
m.m_id = l.login_id
WHERE
l.login_id IS NULL;
3. 조회
SELECT
s.memberId
,s.memberName
,s.memberEmail
FROM
v_sleep_member AS s;
4. 삭제
DROP VIEW v_sleep_member;
'{ "Hello World!" }; > DataBase' 카테고리의 다른 글
(DB) Transction(트랜잭션) (0) | 2022.02.14 |
---|---|
(DB) eXERD 사용 방법 (0) | 2022.01.26 |
(DB) 서브 쿼리(Sub Query) (0) | 2022.01.23 |
(DB) 정규화 (0) | 2022.01.20 |
(DB) 데이터베이스 설계 (0) | 2022.01.14 |