본문 바로가기
개발자 :-)/SQL

[MySQL] 가상의 테이블 : 뷰

by 뚜생첨 2022. 9. 30.

1. 뷰

데이터베이스 개체 중 하나.

window환경에서 바로가기 아이콘 같은 느낌.

가상의 테이블이라고 함.

 

2. 뷰의 기본 생성

CREATE VIEW	뷰 이름
AS
	SELECT 문;

 

3. 뷰를 사용하는 이유

 1) 보안에 도움이 된다.

사용자의 중요한 개인정보인 연락처, 주소 등의 정보가 없는 뷰를 생성하면 정보를 보호할 수 있다.

 

 2) 복잡한 SQL을 단순하게 만들 수 있다.

CREATE VIEW V_memberbuy
AS
	SELECT B.mem_id, M.mem_name, B.prod_name, M.addr, CONCAT(M.phone1, M.phone2) '연락처'
    	FROM 	buy B
    	INNER JOIN member M
        ON B.mem_id = M.mem_id;
        
SELECT * FROM V_memberbuy;

 

 

4. 뷰의 생성, 수정, 삭제

 1) 열 이름에 별칭을 사용할 수 있다.

단 지정하려는 별칭에 공백이 있으면 ` 으로 묶어주어야함. (백틱 : 숫자 1옆)

 

 2) 수정

ALTER VIEW v_memberbuy
AS
	SELECT B.mem_id `회원 아이디`
    	, M.mem_name
        ...
    FROM  buy B
    INNER JOIN member M
    ON B.mem_id = M.mem_id;

 

 3) VIEW 정보 확인

DESCRIBE v_memberbuy;

* Describe 뷰 실행시, 실제 PK컬럼인데도 PK 가 명시되지 않을 수 있으니 주의

 

SHOW CREATE VIEW v_memberbuy;

실제 뷰를 만들때 사용한 쿼리를 확인할 수 있다.

 

4) view를 통해 데이터 update

UPDATE v_memberbuy SET addr = '부산' WHERE mem_id = 'BLK';
SELECT * FROM v_memberbuy;
-- 정상적으로 데이터가 변경된 것을 확인할 수 있다.

Q. 뷰에 INSERT 하게되면?

INSERT INTO v_member(mem_id, mem_name, add) VALUES('BTS', '방탄소년단', '경기');

만약 member 테이블의 not null 컬럼들이 있다면 (뷰에는 포함 X)

INSERT 할 수 없다.

 

뷰를 통해 INSERT 할 수 있지만 권장사항은 아니다!

 

Q. 키가 165 이상인 사람들로 뷰를 만들고 165보다 작은 ROW를 삭제하는 쿼리를 실행하면?

삭제된 ROW가 0인 것을 확인할 수 있다.

Q. 키가 165 이상인 사람들로 뷰를 만들고 160인 데이터를 INSERT 하면?

정상적으로 1건 INSERT 된다.

하지만 뷰의 생성 조건에 맞지 않기 때문에 조회할 수 없고, 권장하지 않는다.

이런 오류가 없기 위해서는 CHECK 제약조건 사용!

ALTER VIEW v_height165
AS
	SELECT * FROM member WHERE height >= 165
    	WITH CHECK OPTION;

-> 뷰의 제약조건을 변경하고 160인 데이터를 INSERT 하면 에러발생하여 입력할 수 없다.

 

Q. 뷰가 참조하는 데이터를 DROP 하면?

DROP TABLE IF EXISTS buy, member;
SELECT * FROM v_memberbuy;

뷰를 조회하면 에러가 발생한다.

-> 왜 안되는지 확인하는 명령어는

CHECK TABLE v_memberbuy;

 

728x90
반응형

'개발자 :-) > SQL' 카테고리의 다른 글

[MySQL] 스토어드 프로시저  (0) 2022.10.01
[MySQL] 인덱스 (1)  (0) 2022.10.01
[MySQL] 테이블, 뷰, 제약조건  (0) 2022.09.29
[MySQL] SQL 프로그래밍( IF, CASE, WHILE, 동적SQL)  (1) 2022.09.26
[MySQL] Join  (1) 2022.09.26

댓글