[Database] MySQL 뷰(View)


MySQL 뷰(View)

뷰 (View) 개념

  • 다른 테이블을 기반으로 만들어진 가상 테이블
  • 데이터를 실제로 저장하지 않음
  • 논리적으로만 존재하는 테이블
  • 일반 테이블과 동일한 방법으로 사용
  • 다른 뷰를 기반으로 새로운 뷰를 만들 수 있음
  • 뷰를 통해 기본 테이블의 내용을 쉽게 검색할 수 있음
  • 기본 테이블의 내용을 변화시키는 작업은 제한적임

뷰 생성

  • 명령어 : CREATE VIEW

  • 속성리스트 : 뷰를 구성하는 속성의 이름

    • 생략 가능 – SELECT 문에서 사용한 속성의 이름을 뷰에서 사용
  • SELECT 문 : 기본 테이블에 대한 SELECT 문

    • ORDER BY를 사용할 수 없음
    • 일반적인 SELECT 문과 동일
  • WITH CHECK OPTION

    • 생성한 뷰에 삽입이나 수정 연산을 할 때, SELECT 문에서 제시한 뷰의 정의 조건을 위반하면 수행되지 않도록 하는 제약조건을 제시
  • 예제 : Customer 테이블에서 등급이 VIP이거나 Gold 인 고객의 account, name, credit 으로 구성된 뷰를 GoodCustomer 이름으로 생성하고- 뷰의 내용을 검색하시오.

    • 기본 테이블의 데이터
      • 뷰 생성 명령어 및 테이블 내용 조회
      • 뷰의 구조 보기
      • 뷰의 속성리스트가 SELECT 문의 속성리스트와 이름이 동일하므로 지정하지 않고 사용


  • 예제 : GoodCustomer 뷰에서 Credit이 10000 이상인 고객의 account와 credit로 구성된 GoodCustomerBigCredit 뷰를 생성하시오.


  • 예제 : 주문 테이블에서 고객별 주문 건수로 구성된 뷰를 OrderByCustomer 라는 이름으로 생성하고, 내용을 조회하시오.

    • 주문 테이블의 데이터 조회
    • OrderByCustomer 뷰를 생성하고 조회하기 위한 명령어
    • OrderByCustomer 뷰의 데이터 조회
    • OrderByCustomer 뷰의 구조

뷰의 활용

  • 뷰의 삽입, 수정, 삭제 연산

    • 기본 테이블에서 수행됨
    • 제한적으로 수행됨
  • 변경 불가능한 뷰

    • 기본 테이블에 있는 내용이 아니고, 집계 함수로 계산된 내용을 포함하는 뷰
    • DISTINCT 키위드를 포함하여 정의한 뷰
    • GROUP BY 절을 포함하여 정의한 뷰
    • 여러 개의 테이블을 조인하여 정의한 뷰 – 변경이 불가능한 경우가 많음

  • 뷰 삽입 (WITH CHECK OPTION)
    • 제약 조건 : SELECT 문에서 제시한 정의 조건
    • 정의 조건을 위배하면 수행 안 됨
    • 예제 : 고객 테이블에서 등급(Grade)이 ‘VIP’ 이거나 ‘Gold’인 고객의 계정과, 이름, 등급을 가진 GoodCustomer4 뷰를 만드시오.
  • 기본 테이블의 데이터가 삭제되거나 변경되면 뷰의 내용도 같이 변경됨
    • 기본 테이블의 데이터를 삭제하기전 데이터
    • customer 테이블의 bank 계정 레코드를 삭제 후

뷰의 장점

  • 질의문을 쉽게 작성할 수 있다.

    • 특정 조건을 만족하는 레코드들로 뷰를 미리 만들어 놓을 경우 ==> 사용자가 WHERE 절에 특정 조건을 넣지 않아도 된다.
    • GROUP BY, 집계함수, 조인 등을 이용해 뷰를 미리 만들 경우 ==> 복잡한 질의문을 만들지 않고 SELECT절과 FROM 절만으로 데이터 검색이 가능
  • 데이터의 보안 유지에 도움이 된다.
    • 여러 사용자의 요구에 맞는 다양한 뷰를 미리 정의
    • 사용자에게 제공된 뷰를 통해서만 데이터에 접근하도록 권한 설정 ==> 뷰에 포함되지 않은 데이터를 사용자로부터 보호할 수 있음.
  • 데이터를 편리하게 관리할 수 있다.
    • 제공된 뷰에 포함되지 않은 기본 테이블의 다른 속성은 사용자가 신경 쓸 필요가 없음
    • 제공된 뷰와 관련이 없는 다른 테이블의 변화에도 영향을 받지 않음.

뷰 삭제

  • 뷰를 삭제해도 기본 테이블은 영향을 받지 않음
  • 명령어 : DROP VIEW 뷰이름 CASCADE ㅣ RESTRICT;
  • 삭제할 뷰를 이용해 만들어진 다른 뷰가 존재할 경우 처리 방법

    • RESTRICT : 다른 뷰가 삭제되지 않음
    • CASCADE : 다른 뷰도 같이 삭제