개발/SQL

[MySQL] 뷰(VIEW)

하빈H 2022. 10. 2. 13:28

뷰(View) 란?

뷰는 데이터베이스 개체 중 하나로, 테이블처럼 데이터를 가지고 있지는 않지만 SELECT 문으로 만들어져 있기 때문에 뷰에 접근하면 SELECT가 실행되고 그 결과를 볼 수 있다. 쉽게 '가상의 테이블'이라고 표현할 수 있다.

 

뷰를 사용하는 이유

  1. 뷰를 만들면 테이블과 동일하게 접근이 가능한데 굳이 뷰를 사용하는 이유 중 하나는 보안이라고 말할 수 있다. 개인정보 등 중요한 정보를 제외하고 뷰를 만들면 접근하는 데이터에 권한을 제한할 수 있다.
  2. 또한, 복잡하고 자주 사용하는 SELECT 쿼리를 뷰로 만들어두면 보다 간결한 쿼리를 작성할 수 있다.

 

뷰 생성

CREATE VIEW v_memberbuy
AS
	SELECT B.mem_id, M.mem_name, B.prod_name, M.addr, CONCAT(M.phone1, M.phone2) '연락처'
      FROM buy B
		INNER JOIN member M ON B.mem_id = M.mem_id;

 

뷰 사용

SELECT 문이랑 동일하게 사용하면 되고, FROM 절에는 뷰 이름을 쓰면 된다.

SELECT * FROM V_memberbuy;

뷰 조회 결과

 

뷰 수정

뷰 수정 시에는 ALTER VIEW ~ AS ~ 로 작성하면 되고, 컬럼 뒤에 ' ' (작은따옴표), " " (큰 따옴표), AS ' ', AS " " 를 사용해 ALIAS를 적용할 수 있다. 뷰에서 ALIAS가 적용된 컬럼을 조회하고자 할 때에는 ` `를 사용하면 된다.

ALTER VIEW v_memberbuy
AS
	SELECT B.mem_id '회원 아이디'
    		, M.mem_name '회원 이름'
            , B.prod_name '제품 이름'
            , M.addr '주소'
            , CONCAT(M.phone1, M.phone2) '연락처'
      FROM buy B	
		INNER JOIN member M ON B.mem_id = M.mem_id;

ALIAS를 적용한 뷰 조회 결과

 

뷰 정보 확인

아래 쿼리를 사용하여 뷰의 정보를 확인할 수 있는데, 기존 테이블의 특정 컬럼이 PK(Primary Key)였어도 뷰 정보에서는 Key로 표기 되지 않는다.

DESCRIBE v_memberbuy;

describe view

 

뷰 삭제

DROP VIEW v_memberbuy;

 

 

* 뷰를 통한 데이터 입력/수정/삭제

뷰에도 데이터 입력이 가능하나, 기존 테이블에 NOT NULL 컬럼이 있는데 해당 컬럼이 뷰에 존재하지 않다거나 하는 이유로 데이터 입력이 안되는 케이스가 발생할 수도 있다. 뷰를 통해 데이터를 입력/수정/삭제하는 것은 권장하는 방법은 아니다.