반응형

[MariaDB] 마리아DB 테이블 - 뷰 view (MySQL)

 

뷰(view)는 일반 사용자 입장에서는 테이블과 동일하게 사용하는 개체입니다.

뷰는 select 문으로 만들어진 테이블로 생각하면 됩니다.

뷰는 기본적으로 읽기전용으로 많이 사용되지만 뷰를 통해서 원 테이블의 데이터를 수정할 수도 있습니다.

 

뷰의 장점으로는 보안에 도움이 된다는 점이 있습니다.

특정사용자에게 어떤 테이블의 모든 정보가 아닌 공개가능한 정보만을 뷰로 생성하여 제공할 수 있기 때문입니다.

그리고 복잡한 조인쿼리등을 단순화 시켜주기도 합니다.

매번 조인을 해서 검색하던 자료를 뷰로 한번 생성해 놓으면 그 후로는 그 뷰를 select로 조회하기만 하면 되기 때문입니다.

 

뷰 생성하기

USE DB명; -- 사용할 DB명
CREATE VIEW v_userbuyTBL	-- v_userbyTBL 뷰 생성 
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	-- userTBL 과 buyTBL 내부조인
	 ON U.userid = B.userid;	-- userid로 조인

SELECT `USER ID`, `USER NAME` FROM v_userbuyTBL; -- 주의! 백틱을 사용한다. 만들어진 뷰에서 select

 

뷰 수정하기

ALTER VIEW v_userbuyTBL	-- v_userbuyTBL 뷰 수정
AS
   SELECT U.userid AS '사용자 아이디', U.name AS '이름', B.prodName AS '제품 이름', 
		U.addr, CONCAT(U.mobile1, U.mobile2)  AS '전화 번호'	-- as(별칭)을 한글로 수정
      FROM userTBL U
          INNER JOIN buyTBL B	-- 내부조인 (userTBL-buyTBL)
             ON U.userid = B.userid ;	-- userid를 기준으로

SELECT `이름`,`전화 번호` FROM v_userbuyTBL;	-- `(백틱)주의. 수정된 뷰를 select 

 

뷰 삭제하기

DROP VIEW 뷰이름;

 

뷰 정보확인

DESCRIBE 뷰이름;

 

뷰 소스코드확인

SHOW CREATE VIEW 뷰이름;

 

뷰로 원본 테이블 수정, 입력이 불가능한 경우

  1.  원본에 NOT NULL인 값이 뷰에 생성되어 있지 않다면 입력 불가능. 뷰를 통해 NOT NULL 열을 입력할 수 없음.
  2.  집계함수를 사용한 뷰(SUM값 등)
  3.  UNION ALL, JOIN 등을 사용한 뷰
  4.  DISTINCT, GROUP BY 등을 사용한 뷰

 

조건으로 만들어진 뷰에 INSERT하기 및 WITH CHECK OPTION

운동선수 테이블에서 180cm 이상인 선수만 뷰로 생성합니다.

CREATE VIEW v_height180	-- v_height180 뷰 생성
AS
	SELECT * FROM userTBL WHERE height >= 180 ;	-- userTBL(원테이블)에서 180 이상만 선택

SELECT * FROM v_height180 ;

 

이제 180cm 미만인 선수를 뷰에 인서트합니다.

INSERT INTO v_height180 VALUES('KBK', '김북강', 1990 , '경기', '010', '5555555', 177, '2022-01-01');	-- 177cm 선수입력

 

위와 같이 입력 시 입력은 되지만 뷰에서는 조회가 안되고 원본 테이블에서는 조회가 되는 상황이 발생합니다.

 

이를 방지하고자 조건으로 만들어진 뷰에 조건에 맞지 않는 데이터가 인서트 될 경우 에러를 만드는 방법이 "WITH CHECK OPTION" 입니다.

CREATE VIEW v_height180	-- v_height180 뷰 생성
AS
	SELECT * FROM userTBL WHERE height >= 180 	-- userTBL(원테이블)에서 180 이상만 선택
	WITH CHECK OPTION;	-- 인서트시 조건에 맞는지 체크하기

 

이 옵션을 추가해서 뷰를 생성 시 180cm 미만의 선수가 입력될 경우 에러가 발생합니다.

 

 

뷰가 참조하는 테이블 삭제 시

뷰가 참조하는 원본 테이블들을 삭제합니다.

DROP TABLE IF EXISTS 테이블명1, 테이블명2;	-- (테이블이 존재한다면) 테이블명1, 테이블명2 삭제

뷰를 조회 할 경우 에러가 납니다. 참조하는 테이블이 없기 때문에 조회 할 수 없다는 에러가 발생합니다.

 

뷰의 상태를 체크하는 명령어로 뷰가 참조하는 테이블이 없는 것을 확인 할 수 있습니다.

CHECK TABLE 뷰이름;

 

 

[MariaDB] 전체보기

 

'MariaDB' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

반응형