MySQL 뷰(View) 생성 및 대체 – 사용법과 주의사항 정리
뷰(View)는 복잡한 쿼리를 간단하게 관리하고, 사용자별로 데이터 접근을 제한할 수 있는 유용한 기능입니다. 이 글에서는 MySQL에서 뷰를 생성, 대체, 삭제하는 방법과 주의할 점을 정리해 드립니다.
✅ 1. 뷰(View)란?
뷰(View)는 가상 테이블로, 실제 데이터를 저장하지 않고 SELECT 쿼리 결과를 기반으로 작동합니다.
✅ 주요 특징
| 장점 | 설명 |
|---|---|
| 필드 제한 | 특정 사용자에게 필요한 컬럼만 제공 가능 |
| 쿼리 단순화 | 복잡한 쿼리를 뷰로 정의해 재사용 |
| 보안 | 민감한 컬럼 숨김 가능 |
| 단점 | 설명 |
|---|---|
| 변경 제한 | 일부 뷰는 데이터 삽입/수정/삭제 불가 |
| 인덱스 미지원 | 뷰 자체에는 인덱스를 적용할 수 없음 |
| 성능 부담 | 실행 시마다 원본 테이블에 접근 |
🛠️ 2. 뷰 생성 문법 및 예제
📌 문법
CREATE VIEW 뷰이름 AS
SELECT 필드1, 필드2, ...
FROM 테이블명
WHERE 조건;
📌 예제
CREATE VIEW MyView AS
SELECT Name, ReserveDate, ReserveDate - CURDATE() AS Dday
FROM Reservation;
📝 Dday는 예약일까지 남은 날짜를 의미합니다.
🔁 3. 뷰 대체 (REPLACE)
📌 문법
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT 필드1, 필드2, ...
FROM 테이블명
WHERE 조건;
📌 예제
CREATE OR REPLACE VIEW MyView AS
SELECT Name, RoomNum, ReserveDate - CURDATE() AS Dday
FROM Reservation;
📝 기존 뷰를 덮어쓰기 하며, 존재하지 않으면 새로 생성됩니다.
🔍 4. 뷰 데이터 확인
SELECT * FROM MyView;
→ 생성된 뷰를 일반 테이블처럼 조회할 수 있습니다.
⚠️ 5. 뷰 사용 시 주의사항
| 항목 | 설명 |
|---|---|
| 이름 중복 금지 | 뷰 이름은 테이블 이름과 중복 불가 |
| 성능 주의 | 뷰는 매번 원본 테이블을 참조하므로 성능 저하 가능 |
| 데이터 조작 제한 | 뷰를 통한 INSERT/UPDATE는 제한될 수 있음 |
| 연산 포함 뷰 | 계산식이 많을 경우 성능에 영향 |
🗑️ 6. 뷰 삭제
📌 문법
DROP VIEW 뷰이름;
📌 예제
DROP VIEW MyView;
→ MyView라는 이름의 뷰를 삭제합니다.
🧾 7. 요약
| 명령어 | 설명 |
|---|---|
CREATE VIEW |
새로운 뷰 생성 |
CREATE OR REPLACE VIEW |
기존 뷰를 덮어쓰거나 새로 생성 |
SELECT |
뷰 데이터 조회 |
DROP VIEW |
뷰 삭제 |
질문 정리
❓ 뷰는 실제 데이터를 저장하나요?
아닙니다. 뷰는 SELECT 쿼리의 결과를 가상으로 보여주는 구조일 뿐, 데이터를 저장하지 않습니다.
❓ 뷰를 통해 데이터를 수정할 수 있나요?
조건을 만족하면 가능합니다. 하지만 JOIN, GROUP BY, 계산식 포함 뷰는 대부분 수정 불가합니다.
❓ 인덱스를 뷰에 적용할 수 있나요?
불가능합니다. 인덱스는 기본 테이블에만 적용됩니다.
댓글남기기