1. 뷰의 개념
- 뷰의 실체는 SELECT문으로 만들어져 있기 때문에 뷰에 접근한느 순간 SELECT가 실행되고 그 결과가 화면에 출력
- 단순 뷰 : 하나의 테이블로 만든 뷰
- 복합 뷰 : 두 개 이상의 테이블로 만든 뷰
- 형식
CREATE VIEW 뷰_이름
AS
SELECT문;
- 뷰에 접근하는 방식은 테이블과 동일한 SELECT문
ex) 회원 테이블의 아이디, 이름, 주소에 접근하는 뷰
USE market_db;
CREATE VIEW v_member
AS
SELECT mem_id,mem_name,addr FROM member;
SELECT * FROM v_member;
2. 뷰를 사용하는 이유
1) 보안(security)에 도움이 됨
2) 복잡한 SQL을 단순하게 만듬
3. 뷰의 실제 작동
1) 뷰의 생성
- 뷰를 조회할 때는 열 이름에 공백이 있으면 백틱(`)으로 묶어줘야 함
USE market_db;
DROP VIEW IF EXISTS v_viewtest1;
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 B.mem_id = M.mem_id;
SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1;
2) 뷰의 수정
- 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 B.mem_id = M.mem_id;
SELECT DISTINCT `회원 아이디`, `회원 이름` FROM v_viewtest1;
3) 뷰의 정보 확인
CREATE OR REPLACE
- 기존에 뷰가 있어도 덮어쓰는 효과를 내기 때문에 오류가 발생하지 않음
USE market_db;
CREATE OR REPLACE VIEW v_viewtest2
AS
SELECT mem_id, mem_name, addr FROM member;
DESCRLBE
- 기존 뷰의 정보 확인 가능
- PRIMARY KEY등의 정보는 확인되지 않음
DESCRIBE v_viewtest2;
SHOW CREATE VIEW
- 뷰의 소스 코드 확인
4) 뷰를 통한 데이터의 수정/삭제
- 뷰를 통해서 테이블의 데이터를 수정 가능
UPDATE v_member SET addr = '부산' WHERE mem_id = 'BLK';
- 지정한 범위로 뷰를 생성
ex) 평균 키가 167 이상인 뷰 생성
CREATE VIEW v_height167
AS
SELECT * FROM member WHERE hegiht >=167;
SELECT * FROM v_height167;
- v_height167 뷰에서 키가 167 미만인 데이터 삭제 (삭제될 데이터 없음)
DELETE FROM v_HEIGHT167 WHERE height < 167;
5) 뷰를 통한 데이터의 입력
WITH CHECK OPTION
- 뷰에 설정된 값의 범위가 벗어나는 값은 입력되지 않도록 할 수 있음
- 설정한 범위의 데이터만 입력되도록 제한
ALTER VIEW v_height167
AS
SELECT * FROM member WHERE height >= 167
WITH CHECK OPTION;
INSERT INTO v_height167 VALUES('TOB','텔레토비',4,'영국',NULL,NULL,140,'1995-01-01');
- 167 미만인 데이터는 입력되지 않고, 167 이상의 데이터만 입력됨
6) 뷰가 참조하는 테이블의 삭제
- 테이블은 뷰가 참조하고 있어도 삭제됨
CHECK TABLE
- 뷰의 상태 확인 가능
'데이터 > SQL' 카테고리의 다른 글
[혼공] 6-2장 인덱스의 내부 작동 (0) | 2023.08.14 |
---|---|
[혼공] 6-1장 인덱스 개념 (0) | 2023.08.14 |
[혼공] 5-2장 테이블 제약조건 (0) | 2023.08.13 |
[혼공] 4-3장 SQL 프로그래밍 (0) | 2023.08.12 |
[혼공] 4-2장 두 테이블을 묶는 조인 (0) | 2023.08.08 |