VIEW

선봉·2023년 3월 1일
0

MySQL

목록 보기
25/36
post-thumbnail

가상의 테이블

사용자 입장에서는 일반 테이블이랑 다를게 없어보인다.

개발자가 원본 테이블에서 보여주고 싶은 내용만 뷰에 허용을 해서 보여주기 때문에
보안성이 있다고 한다.

문법

USE tabledb;
CREATE VIEW v_usertbl
AS
	select userid, name, addr from usertbl;
	

실습

뷰 생성 및 수정

usertbl

use sqldb;

CREATE OR REPLACE VIEW v_usertbl -- 뷰가 이미 있으면 덮어쓰고 없으면 만든다.
AS
	SELECT U.userid AS 'USER ID',U.name AS 'USER NAME', 
		B.prodName AS 'PRODUCT NAME',U.addr
		FROM usertbl U 
        INNER JOIN buytbl B
			ON U.userid=B.userid;
SELECT `USER ID`,`USER NAME` FROM v_usertbl; -- 열 이름에 띄어쓰기가 있으면 벡틱을 사용
SELECT * FROM usertbl;

v_usertbl

뷰에서 작업한 내용은 원본 테이블에도 적용이 되는지 직접 확인해 봤다.

UPDATE v_usertbl
SET addr = '서울' WHERE addr = '익산';
SELECT * FROM usertbl;


원래 서울이었던 정보가 익산으로 바뀌었다.

집계 함수를 사용한 뷰

뷰를 생성할 때 집계 함수를 사용해도 만들 수 있다.
이런 경우는 UPDATE 불가능이다.

INFORMATION_SCHEMA.VIEWS 을 통해 업데이트 가능 여부를 확인할 수 있다.

CREATE VIEW v_sum
AS
SELECT userid AS 'userid', SUM(price*amount) AS 'total'
	FROM buytbl GROUP BY userid;
SELECT * from v_sum;

SELECT * FROM INFORMATION_SCHEMA.VIEWS
	WHERE TABLE_SCHEMA = 'sqldb' AND TABLE_NAME = 'v_sum';

IS_UPDATABLE : NO

뷰 정보 확인

DESCRIBE v_usertbl; -- 테이블의 구조를 검색한다. 기본키는 확인 안된다.

SHOW CREATE VIEW v_usertbl; -- 뷰를 만드는 데 사용된 원본 쿼리를 보여주어 구성을 알 수 있다.

WITH CHECK OPTION
-- 사용 예시
-- employees 테이블에서 salary 필드가 5000 이상인 레코드만을 가져오는 뷰 high_salary_employees를 만들었다면, 다음과 같이 WITH CHECK OPTION을 추가하여 해당 뷰에서 salary 필드를 업데이트할 때 조건을 만족해야만 허용하도록 할 수 있습니다.
CREATE VIEW high_salary_employees AS
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >= 5000
WITH CHECK OPTION;
-- 위의 뷰에서 salary 필드가 5000 미만인 레코드를 업데이트하려고 하면, 해당 레코드는 뷰에서 필터링되므로 업데이트가 허용되지 않습니다. 따라서 WITH CHECK OPTION을 사용하여 데이터의 무결성을 유지할 수 있습니다.

WITH CHECK OPTION
데이터를 업데이트하는 뷰(view)에서 사용할 수 있는 옵션입니다. 이 옵션은 뷰를 통해 업데이트된 데이터가 해당 뷰에서 정의한 조건을 충족하는지 확인하여 무결성 제약 조건(integrity constraint)을 유지하도록 합니다.

뷰 삭제

DROP VIEW 뷰_이름;
profile
백엔드 개발자

0개의 댓글

관련 채용 정보