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;
'개발자 :-) > 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 |
댓글