혼자서 데이터베이스를 작업하는 경우 모든 권한을 마음대로 컨트롤할 수 있습니다. 외주업체 등 여러 명이 데이터를 활용할 때 사용자에게 꼭 필요한 정보만 접근해야 할 때가 있습니다. 이때 필요한 게 View입니다.
View
뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위하여 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블입니다. 저장장치에 물리적으로 존재하지는 않지만, 사용자에게 있는 것처럼 간주하고 사용됩니다. 이를 통해 데이터 보정작업 등 임시적인 용도로 사용됩니다. 또한 Join 된 데이터를 뷰를 통하여 간단하게 뽑을 수 있습니다.
View를 사용할 때 장단점
View를 사용할 때 장단점은 다음과 같습니다.
장점
- 특정 사용자에게 테이블 전체가 아닌 필요한 데이터만 보여줄 수 있습니다.
- 복잡하게 조인된 쿼리를 단순화하여 사용할 수 있습니다.
- 사용한 쿼리를 재사용할 수 있습니다.
단점
- 한번 생성한 뷰는 ALTER를 이용하여 변경할 수 없습니다.
- INSERT, UPDATE, DELETE 작업 시 많은 제한 사항을 가집니다.
- 독립적인 인덱스를 가질 수 없습니다.
View 생성 및 데이터 활용
View 생성
-- 학적부에 성명이 김으로 시작하는 사람의 뷰 생성
CREATE VIEW student_kim_view(학번, 성명, 전화번호, 입학년도)
AS SELECT 학번, 성명, 전화번호, 입학년도
FROM 학적부
WHERE 성명 LIKE '김%' ;
View 대체, 수정
오라클에서는 ALTER를 이용하여 편집 할 수 없으나 MySQL에서는 편집 할 수 있습니다. 오라클을 사용하는 경우에는 REPLACE를 이용하여 덮어서 대체하도록 합니다.
-- 학적부에 성명이 김으로 시작하는 사람의 뷰 대체
CREATE OR REPLACE VIEW student_kim_view(학번, 성명, 전화번호, 입학년도)
AS SELECT 학번, 성명, 전화번호, 입학년도
FROM 학적부
WHERE 성명 LIKE '김%' ;
-- 수정
ALTER VIEW student_kim_view(학번, 성명, 생년월일, 입학년도)
AS SELECT 학번, 성명, 생년월일, 입학년도
FROM 학적부
WHERE 성명 LIKE '김%' ;
View 제거
DROP VIEW 뷰이름 [RESTRICT or CASCADE]
--student_kim_view 뷰 삭제
DROP VIEW student_kim_view;
--뷰를 참조한 테이블까지 연쇄 삭제
DROP VIEW student_kim_view CASCADE;
뷰를 제거하는 방법은 RESTRICT와 CASCADE로 총 두 가지로 이루어져 있습니다.
- RESTRICT : 다른 곳에서 뷰를 참고하고 있으면 뷰 삭제를 취소한다.
- CASCADE : 뷰를 참조하는 다른뷰나 조건까지 삭제한다.
자신이 필요한 상황에 맞춰 사용하도록 합니다.
View 데이터 조회방법
우리가 SELECT를 통하여 테이블을 조회한 것과 같이 뷰도 같은 방법으로 조회하면 됩니다.
-- 위의 예제중 입학년도가 2023인 사람을 출력하는 예제
SELECT 학번, 성명, 전화번호, 입학년도
FROM student_kim_view
WHERE 입학년도 = 2023;
단순 View & 복합 View
-- 단순뷰
CREATE VIEW student_kim_view(학번, 성명, 전화번호, 입학년도)
AS SELECT 학번, 성명, 전화번호, 입학년도
FROM 학적부
WHERE 성명 LIKE '김%' ;
-- 복합뷰
CREATE VIEW student_kim_view(학번, 성명, 전화번호, 입학년도, 졸업년도)
AS
SELECT A.학번, A.성명, A.전화번호, A.입학년도, B.졸업년도
FROM 학적부 A
LEFT OUTER JOIN 졸업사정부 B
ON A.학번 = B.학번
WHERE A.성명 LIKE '김%' ;
View를 생성할 때 테이블의 개수, JOIN, 함수, UNION, GROUP BY를 사용에 따라 구분합니다.
- 단순 뷰 : 단일 테이블 구조로 이루어져 있으며 JOIN, 함수, GROUP BY, UNION 등을 사용하지 않습니다.
- 복합 뷰 : JOIN, 함수, GROUP BY, UNION 등을 사용하여 뷰를 생성합니다.
마지막으로 단순 뷰인 경우 INSERT, UPDATE, DELETE 명령어가 자유롭습니다. 하지만 복합 뷰인 경우 INSERT, UPDATE, DELETE 명령어가 거의 불가능합니다. 단 JOIN만 이루어진 View는 제한적으로 UPDATE를 할 수 있습니다.
'컴퓨터 > MySQL' 카테고리의 다른 글
MySQL (18) - 트리거(Trigger)를 만들어보자 (0) | 2024.03.07 |
---|---|
MySQL (17) - Join에서 중복을 제거하는 방법 (0) | 2023.10.19 |
MySQL (15) - 쿼리문을 합하는 방법 (UNION, UNION ALL) (0) | 2023.08.13 |
MySQL (14) - 내장함수를 이용하여 날짜 및 시간을 다뤄보자 (0) | 2023.06.20 |
MySQL (13) - 프로시저(Procedure)와 함수(Function) (0) | 2023.05.01 |