1. 뷰란
MySQL 버전 5 이상부터 가능한 특정 명령문에 매칭된 가상 테이블입니다.
SELECT, WEHRE, Sub Query, UNION, JOIN 등 다양한 결합과 조건으로 만들어진 데이터를 뷰를 통해 가상 테이블을 만들어 편리하고 빠르게 데이터를 액세스 할 수 있습니다.
특징
- 실제로 데이터를 저장하지 않고 오직 보여주는데 중점을 둔 기능입니다.
- 뷰의 기반 테이블의 데이터를 수정할 경우 뷰에도 반영됩니다.
- 뷰의 데이터를 수정할 경우 실제 데이터도 같이 바뀝니다.
- 뷰로 생성된 가상 테이블에도 데이터를 삽입할 수 있습니다, 하지만 JOIN, UNION, Sub Query 등으로 만들어진 뷰에서는 데이터를 삽입할 수 없습니다, 하지만 그 외 뷰에서는 UPDATE 및 INSERT가 가능합니다.
2. 사용법
뷰 생성문
CREATE VIEW 뷰 명칭 AS
SELECT 컬럼 1, 컬럼 2, ... FROM 테이블명 조건문;
아래와 같은 테이블에서 City가 서울인 데이터들을 모아 새로운 가상 테이블을 생성하겠습니다.
CREATE VIEW seoul_members AS
SELECT LastName, FirstName, Address, City, Country FROM members where City = '서울';
아래처럼 City가 서울인 맴버들로 가상테이블이 만들어진 것을 확인 할 수 있습니다.
테이블 정보 확인 명령어
뷰는 물리적 테이블의 명령어들이 통합니다.
아래 명령어는 테이블 리스트를 출력하는 명령어로
뷰의 가상 테이블이 물리적 테이블와 구분 없이 출력되는 것을 알 수 있습니다.
show tables
테이블의 상세 정보 보기 명령어 또한 뷰에 적용이 가능합니다.
show create table seoul_members;
desc seoul_members;
뷰 삭제
아래 명령어는 seoul_members 라는 뷰가 없으면 에러가 발생합니다.
DROP VIEW seoul_members;
뷰가 없을 때 출력되는 에러가 보기 싫을 경우 아래 명령어로 대체가 가능합니다.
DROP VIEW IF EXISTS seoul_members;
위 명령어로 seoul_members 뷰가 있으면 삭제하고 없으면 넘어가게 됩니다.
뷰 조건 일치
현재 뷰를 통한 데이터 추가는 아래와 같은 데이터를 값을 추가할 경우
INSERT INTO seoul_members VAlUES ('초','코비','주소3','부산','대한민국');
members 테이블과 seoul_members 테이블에 위 값이 추가됩니다.
하지만 저는 INSERT 문의 표시된 테이블명인 seoul_members는 City가 서울인 데이터들의 가상 테이블로 정의했습니다.
그런 시점에서 볼 경우 위 명령문이 실행된다는 것은 일관성이 떨어진다고 볼 수 있습니다.
이를 해결해서 City가 서울인 값만을 받기 위해서는 뷰를 생성할 떄 아래 옵션을 추가하면됩니다.
WITH CHECK OPTION;
위 옵션을 추가한 seoul_members, 뷰 생성문은 아래와 같습니다
CREATE VIEW seoul_members AS
SELECT LastName, FirstName, Address, City, Country FROM members where City = '서울'
WITH CHECK OPTION;
그러면 아래와 같이 seoul_members 테이블에 값을 추가할 수 있는 값은 City가 서울인 값만을 받게 됩니다.
seoul_members 테이블과 members 테이블이 두 번째만 적용된 것을 확인 할 수 있습니다.
뷰 업데이트
뷰는 일부분만을 업데이트 할 수 없습니다. 전체를 덮어쓰기 형태로 업데이트 할 수 있습니다.
OR REPLACE
CREATE OR REPLACE VIEW 뷰 명칭 AS
SELECT 컬럼 1, 컬럼 2, ... FROM 테이블명 조건문;
위와 같이 OR REPLACE 키워드를 추가하시면 됩니다.
뷰 컬럼 변경
ALTER VIEW 키워드를 통해 뷰의 컬럼 구조를 변경할 수 있습니다.
ALTER VIEW 뷰 명칭 AS SELECT 컬럼명 FROM 테이블명;
저는 아래와 같이 컬럼 구조를 변경해보았습니다.
ALTER VIEW seoul_members AS SELECT LastName, FirstName FROM members where City = '부산';
'MySQL' 카테고리의 다른 글
[MySQL] Insert 할 때 중복 값 업데이트 (ON DUPLICATE KEY UPDATE) (1) | 2024.02.23 |
---|---|
[MySQL] 실행 계획(Query Plan)이 뭔데 (0) | 2023.12.02 |
[MySQL] 함수(Function) 사용법 (0) | 2020.12.29 |
[MySQL] 트랜잭션(Transaction) 사용법 (0) | 2020.12.29 |
[MySQL] 트리거(Trigger) 사용법 (0) | 2020.12.29 |