everyday com-eat
작성일
2022. 1. 26. 14:32
작성자
갱수터
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;
728x90

'{ "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