본문 바로가기
DB/MySQL

[DB] View / MySQL 사용법

by 계범 2022. 2. 23.

View 정의

뷰는 가상의 테이블이다. 실제 데이터를 가지고 있지 않다.

진짜 테이블에 링크된 개념으로, 뷰를 SELECT하면 진짜 테이블의 데이터를 조회하는 것과 동일한 결과.

 

뷰의 실체는 SELECT문이다. 뷰는 SELECT문을 실행한 결과 테이블으로 생각하면 된다.

뷰에 접근하게 되면, 뷰 생성시에 입력한 select문이 작동하고 그에 따른 결과 테이블을 반환해준다.

 

View 관련 명령어

# 뷰 생성 명령어
CREATE VIEW (뷰명)
AS  SELECT (가져올 컬럼) FROM (원본테이블);

# 뷰 접근 명령어
SELECT * FROM (뷰명);

# 뷰 삭제 명령어
DROP VIEW (뷰명) (조건);

# 조건 2가지
# RESTRICT : 뷰를 다른곳에서 참조하고 있으면 삭제 취소
# CASCADE : 뷰를 참조하는 다른 뷰 또는 제약 조건까지 모두 삭제

# 뷰 수정 명령어(대체해서 쓰는걸로 봐야함)
ALTER VIEW (뷰명)
AS SELECT문;

 

뷰의 장점

  1.  보안에 도움이 된다
    • 원본 테이블에서 사용자에게 보여줄 데이터만을 가지고 뷰를 만들고 이에 대한 접근 권한만 줌으로서, 사용자에게 중요 정보들은 보여지지 않고 접근하지 못하게 할 수 있다.
  2. 복잡한 쿼리를 단순화 시켜준다.
    • 여러 조건을 준 select문을 매번 부를 필요 없이, 이에 해당하는 뷰를 만들어두고 뷰에 접근해서 사용하면 된다.

 

뷰의 단점

  1. 정의된 뷰는 일부만 변경할 수 없음. (재정의해야함)
  2. 데이터 삽입, 삭제, 갱신 작업 시에 제한 사항이 많음
    • 실제 원본 테이블의 데이터가 삽입,삭제,갱신 되는 것이기때문에, 원본 테이블의 조건에 맞게 데이터를 조작해야한다.
    • 원본 테이블의 특정 컬럼이 NOT NULL 설정되어 있고, VIEW 테이블에 해당 컬럼이 없을때, VIEW테이블을 통한 데이터 삽입 불가능
    • 집계 함수, UNION ALL, JOIN, DISTINCT, GROUP BY 등을 사용한 뷰도 데이터 변경이 불가능하다.
      • 여러 테이블이 섞였거나, 원본테이블에서 변경되었기때문에..
  3. 뷰만의 독립적인 INDEX를 가질 수 없다.

 

참조

'이것이 MySQL이다' 책 참조

댓글