컴퓨터/MySQL

MySQL (16) - 뷰(View)에 대하여 알아보자

달서비 2023. 10. 3. 22:15

혼자서 데이터베이스를 작업하는 경우 모든 권한을 마음대로 컨트롤할 수 있습니다. 외주업체 등 여러 명이 데이터를 활용할 때 사용자에게 꼭 필요한 정보만 접근해야 할 때가 있습니다. 이때 필요한 게 View입니다.

Database - Pixabay

View

뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위하여 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블입니다. 저장장치에 물리적으로 존재하지는 않지만, 사용자에게 있는 것처럼 간주하고 사용됩니다. 이를 통해 데이터 보정작업 등 임시적인 용도로 사용됩니다. 또한 Join 된 데이터를 뷰를 통하여 간단하게 뽑을 수 있습니다.

 

View를 사용할 때 장단점

View를 사용할 때 장단점은 다음과 같습니다.

 

장점

  1. 특정 사용자에게 테이블 전체가 아닌 필요한 데이터만 보여줄 수 있습니다.
  2. 복잡하게 조인된 쿼리를 단순화하여 사용할 수 있습니다.
  3. 사용한 쿼리를 재사용할 수 있습니다.

 

단점

  1. 한번 생성한 뷰는 ALTER를 이용하여 변경할 수 없습니다.
  2. INSERT, UPDATE, DELETE 작업 시 많은 제한 사항을 가집니다.
  3. 독립적인 인덱스를 가질 수 없습니다.

 

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를 할 수 있습니다.