MariaDB | 뷰 VIEW
2025. 2. 4. 10:39ㆍ기반기술/Database
1. VIEW
- SELECT 쿼리문을 저장한 객체로 가상테이블이라고 불린다.
- 실질적인 데이터를 물리적으로 저장하고 있지 않고 쿼리만 저장했지만 테이블을 사용하는 것과 동일하게 사용할 수 있다.
- 사용 목적
- 데이터를 쉽게 읽고 이해할 수 있도록 함
- 원본 데이터의 보안을 유지하는데 도움
2. VIEW 생성 (CREATE VIEW)
- CREATE VIEW 이름 AS (SELECT ... ) ;
- 베이스 테이블의 정보가 변경되면 VIEW의 결과도 같이 변경된다.
SELECT * FROM tbl_menu;
-- VIEW 생성
CREATE VIEW hansik AS
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 4;
-- 생성된 VIEW 조회
SELECT * FROM hansik;
3. VIEW를 통한 DML (INSERT, UPDATE, DELETE)
- VIEW를 통한 DML 작업은 베이스 테이블에도 영향을 주게 된다.
- 사용된 SUBQUERY에 따라 DML 명령어로 조작이 불가능할 수 있다.
- 뷰 정의에 포함되지 않은 컬럼을 조작하는 경우
- 뷰에 포함되지 않은 컬럼 중에 베이스가 되는 테이블 컬럼이 NOT NULL 제약조건이 지정된 경우
- 산술 표현식이 정의된 경우
- JOIN을 이용해 여러 테이블을 연결한 경우
- DISTINCT를 포함한 경우
- 그룹함수나 GROUP BY 절을 포함한 경우
-- 1. VIEW INSERT
INSERT
INTO hansik
VALUES (99, '수정과맛국밥', 5500, 4, 'Y');
-- INSERT INTO hansik VALUES (null, '식혜맛국밥', 5500, 4, 'Y'); -- 에러 발생
-- 2. VIEW UPDATE
UPDATE hansik
SET menu_name = '버터맛국밥', menu_price = 5700
WHERE menu_code = 99;
-- 3. VIEW DELETE
DELETE FROM hansik WHERE menu_code = 99;
SELECT * FROM hansik;
SELECT * FROM tbl_menu;
4. VIEW 삭제 (DROP VIEW)
DROP VIEW hansik;
5. VIEW 옵션
- OR REPLACE : 이미 같은 이름의 뷰를 생성할 경우 존재하고 있는 뷰를 갱신 (덮어쓰기)
- CHECK : 뷰를 통한 데이터 변경시 뷰 정의 조건을 만족하지 않는 데이터는 추가/수정 불가하도록 제한하는 옵션
- WITH LOCAL CHECK OPTION : 뷰 자체 조건만 검사
- WITH CASCADED CHECK OPTION : 상위 뷰의 조건까지 검사 (default)
-- 1. OR REPLACE
CREATE OR REPLACE VIEW hansik AS
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 4;
-- 2. CHECK
CREATE VIEW hansik_with_check AS
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 4
WITH CHECK OPTION;
INSERT INTO hansik VALUES (100, '감자탕', 8000, 3, 'Y'); -- 성공
INSERT INTO hansik_with_check VALUES (101, '감자탕', 8000, 3, 'Y'); -- 실패, category_code = 4 X