뷰 (View)
테이블과 밀접하게 연관되어 있는 데이터베이스 개체이다.
테이블처럼 데이터를 가지고 있지는 않다.
단순 뷰, 복합 뷰 로 구분된다.
뷰 (View) 의 기본 생성
- 뷰를 만드는 형식
CREATE VIEW 뷰_이름
AS
SELECT 문;
- 뷰에 접근하는 방식
SELECT 열_이름 FROM 뷰_이름
[WHERE 조건];
- 회원 테이블의 아이디, 이름, 주소에 접근하는 뷰 생성, 접근하기
// 뷰 생성
USE market_db;
CREATE VIEW v_member
AS
SELECT mem_id, mem_name, addr FROM member;
// 뷰 접근
SELECT * FROM v_member;
뷰의 실체는 SELECT 문이다
뷰를 사용하는 이유
📌 보안(security)에 도움이 된다
기본적인 정보만 보이는 뷰를 생성해서 권한이 없을 경우 테이블에 접근하지 못하도록 한다.
📌 복잡한 SQL을 단순하게 만들 수 있다
자주 사용하는 쿼리를 뷰로 만들면 매번 복잡한 SQL을 입력할 필요가 없다.
뷰의 실제 생성, 수정, 삭제
뷰를 생성할 때 **별칭(Alias)**을 사용해 뷰의 열 이름을 테이블과 다르게 지정할 수 있다.
뷰 조회 시 열 이름에 공백이 있으면 백틱(`)으로 묶어준다.
- 뷰 생성
CREATE VIEW 뷰_이름
USE market_db;
CREATE VIEW v_viewtest1
AS
SELECT B.mem_id 'Member ID', M.mem_name AS 'Member Name',
B.prod_name "Product Name",
CONCAT(M.phone1, M.phone2) AS "Office Phone"
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1;
- 뷰 수정
ALTER VIEW 뷰_이름
ALTER VIEW v_viewtest1
AS
SELECT B.mem_id '회원 아이디', M.mem_name AS '회원 이름',
B.prod_name "제품 이름",
CONCAT(M.phone1, M.phone2) AS "연락처"
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
SELECT DISTINCT `회원 아이디`, `회원 이름` FROM v_viewtest1;
- 뷰 삭제
DROP VIEW 뷰_이름
DROP VIEW v_viewtest1;
뷰의 정보 확인하기
- 뷰의 정보 확인
DESCRIBE 뷰_이름 ( = DESC 뷰_이름)
// 테스트용 뷰 생성하기
USE market_db;
CREATE OR REPLACE VIEW v_viewtest2
AS
SELECT mem_id, mem_name, addr FROM member;
// 뷰 정보 확인하기
DESCRIBE v_viewtest2;
→ DESCRIBE로 뷰의 키 정보는 확인할 수 없다 (테이블은 가능)
- 뷰의 소스코드 확인
SHOW CREATE VIEW 뷰_이름
SHOW CREATE VIEW v_viewtest2;
뷰를 통한 데이터의 수정 / 삭제
- 뷰를 통한 데이터 수정
UPDATE 뷰_이름 SET 수정 내용
UPDATE v_member SET addr = '부산' WHERE mem_id = 'BLK';
- 뷰에 데이터 입력
INSERT INTO 뷰_이름(열_이름) VALUES(입력할 데이터)
INSERT INTO v_member(mem_id, mem_name, addr) VALUES('BTS', '방탄소년단', '경기');
-> 뷰를 통해 데이터를 입력하려면, 뷰에서 보이지 않는 테이블의 열에 NOT NULL이 없어야 한다.\
- 뷰를 통한 데이터 삭제
DELETE FROM 뷰_이름 WHERE 조건
// 테스트용 뷰 생성
CREATE VIEW v_height167
AS
SELECT * FROM member WHERE height >= 167;
SELECT * FROM v_height167;
// 키가 167 미만인 데이터 삭제
DELETE FROM v_height167 WHERE height < 167;
-> 키가 167 미만인 데이터가 없어서 삭제되는 행이 없다.
- 뷰를 통한 데이터의 입력 : 키가 167 미만인 데이터 입력
INSERT INTO v_height167 VALUES('TRA', '티아라', 6, '서울', NULL, NULL, 159, '2005-01-01');
SELECT * FROM v_height167;
-> 키가 167 이상인 데이터만 보이도록 만든 뷰이므로, 입력한 데이터는 보이지 않는다.
- 뷰에 설정된 값의 범위에서 벗어나는 값은 입력되지 않게 하기 -> 예약어 WITH CHECK OPTION 사용
ALTER VIEW v_height167
AS
SELECT * FROM member WHERE height >= 167
WITH CHECK OPTION;
INSERT INTO v_height167 VALUES('TOB', '텔레토비', 4, '영국', NULL, NULL, 140, '1995-01-01');
167 미만의 데이터이기 때문에 입력되지 않는다.
단순 뷰와 복합 뷰
단순 뷰 : 하나의 테이블로 만든 뷰
복합 뷰 : 두 개 이상의 테이블로 만든 뷰, 읽기 전용으로 데이터 입력/수정/삭제 불가능
- 뷰가 참조하는 테이블의 삭제
뷰가 참조하고 있더라도 테이블은 삭제된다.
뷰가 조회되지 않으면 CHECK TABLE 문으로 뷰의 상태를 확인한다.
'Language > SQL' 카테고리의 다른 글
[MySQL] 인덱스의 내부 작동 방식을 이해하자 (7) | 2024.08.21 |
---|---|
[MySQL] 인덱스의 개념을 알아보자 (0) | 2024.08.21 |
[MySQL] 제약조건에 대해 알아보자 (0) | 2024.08.21 |
[MySQL] SQL 프로그래밍 (4) | 2024.08.21 |
[MySQL] 두 테이블을 묶는 조인(JOIN)에 대해 알아보자 (0) | 2024.08.21 |