반응형
[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 뷰이름;
뷰로 원본 테이블 수정, 입력이 불가능한 경우
- 원본에 NOT NULL인 값이 뷰에 생성되어 있지 않다면 입력 불가능. 뷰를 통해 NOT NULL 열을 입력할 수 없음.
- 집계함수를 사용한 뷰(SUM값 등)
- UNION ALL, JOIN 등을 사용한 뷰
- 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] 마리아DB 스토어드 프로그램 - 스토어드 프로시저 Stored Procedure (MySQL) (0) | 2020.10.13 |
---|---|
[MariaDB] 마리아DB 테이블 - 임시테이블, 테이블삭제, 테이블수정 (MySQL) (0) | 2020.09.22 |
[MariaDB] 마리아DB 테이블 - UNIQUE, CHECK, DEFAULT, Null 제약조건 (MySQL) (0) | 2020.09.22 |