[Lecture Note] MySQL 11. View
이것이 MySQL이다 강의를 참고하여 정리한 글임을 밝힙니다.
View
일종의 가상의 테이블로 테이블에 링크된 개념입니다. 이를 통해 READ와 WRITE를 할 수 있는 범위가 제한되게 됩니다.
또한 기존의 테이블 중 VIEW에 포함되지 않은 열에 NN과 같은 특성이 있을 수 있기 때문에 VIEW를 통해 데이터 추가는 지양합니다.
장점으론 정해진 데이터만 보여주어 보안에 도움이 되며 쿼리를 간단하게 만들 수 있습니다.
- 예시 1
CREATE VIEW v_userbuytbl AS -- 한글은 권장되지 않는다. SELECT U.userid AS 'USER ID', U.name AS 'USER NAME', B.prodName AS 'PRODUCT NAME', U.addr, CONCAT(U.mobile1, U.mobile2) AS 'MOBILE PHONE' FROM usertbl U INNER JOIN buytbl B ON U.userid = B.userid;
- 기존의 뷰에 덮어 쓰기
CREATE OR REPLACE VIEW v_usertbl AS
SELECT userid, name, addr FROM usertbl;
- 예시 2
CREATE VIEW v_sum AS
SELECT userid AS 'userid', SUM(price*amount) AS 'total'
FROM buytbl GROUP BY userid;
SELECT * FROM v_sum;
위와 같은 VIEW의 경우 GROUP BY와 중간에 SUM으로 이루어져 있기 때문에 애초에 수정이 불가능합니다.
이와 관련된 정보를 보는 건 다음의 코드이며 이 때 v_sum의 IS_UPDATE가 NO로 되어있습니다.
SELECT * FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'sqldb' AND TABLE_NAME = 'v_sum';
- 예시 3 : READ & WRITE
CREATE VIEW v_height177
AS
SELECT * FROM usertbl WHERE height >= 177 ;
해당 뷰에 WHERE를 만족하는 데이터가 없어서 지워지는 데이터도 없게 됩니다.
DELETE FROM v_height177 WHERE height < 177 ;
WHERE을 만족하지 못하는 데이터를 넣으면 입력은 되긴 합니다. 단 다시 와서 불러 보면 안보이게 됩니다.
INSERT INTO v_height177 VALUES('KBM', '김병만', 1977 , '경기', '010', '5555555', 158, '2023-01-01') ;
SELECT * FROM v_height177;
이런 경우 CHECK OPTION을 넣어서 방지할 수 있습니다.
ALTER VIEW v_height177 AS
SELECT * FROM usertbl WHERE height >=177
WITH CHECK OPTION;
- 예시 4: 복합 뷰
join을 통해 여러개의 테이블이 묶인 뷰는 UPDATE, INSERT가 불가능 합니다.
CREATE VIEW v_userbuytbl
AS
SELECT U.userid, U.name, B.prodName, U.addr, CONCAT(U.mobile1, U.mobile2) AS mobile
FROM usertbl U
INNER JOIN buytbl B
ON U.userid = B.userid ;
- 예시 5: 테이블 상태 확인
뷰가 보고 있는 테이블의 상태를 확인하는 코드입니다.
CHECK TABLE v_userbuytbl;
댓글남기기