1 분 소요

이것이 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;

태그:

카테고리:

업데이트:

댓글남기기