뷰는 기본적으로 읽기 전용으로 사용되지만 뷰를통해서 원본 테이블의 데이터를 수정하는 것도 가능하다
뷰를 통해 테이블을 수정하거나 데이터를 삽입하기 위해서는 제약조건 중 NOT NULL조건이나 , UNIQUE 조건등을 고려하여 삽입하거나 수정하려는 데이터가 중복되는지 혹은 비어있는지 확인한 후에 원본 테이블을 수정할 수 잇음
뷰를 사용하는 이유
보안
뷰를 생성할 때 중요한 정보를 가진 컬럼은 뷰에 포함하지 않은 상태로 뷰를 생성하여 정보의 노출을 막을 수 있음
EX) 주민등록번호, 계좌 비밀번호 등
데이터 베이스도 사용자마다 테이블에 접근하는 권한에 차별을 두어서 처리함
쿼리 추상화
자주 사용하는 쿼리를 뷰로 생성하여 쿼리의 재사용성을 높힐 수 있음
복잡한 쿼리를 추상화 하여 중복을 제거하고 재사용성을 높힘
복잡한 쿼리 예시
SELECT
customers.customer_id,
customers.first_name,
customers.last_name,
orders.order_date
FROM
customers
JOIN
orders ON customers.customer_id = orders.customer_id
WHERE
orders.order_date >= '2023-01-01';
쿼리를 뷰로 생성
CREATE VIEW v_customer_orders AS
SELECT
customers.customer_id,
customers.first_name,
customers.last_name,
orders.order_date
FROM
customers
JOIN
orders ON customers.customer_id = orders.customer_id
WHERE
orders.order_date >= '2023-01-01';
뷰 실행
SELECT * FROM v_customer_orders;
뷰 별칭
AS키워드로 컬럼 별칭 선언 AS는 생략가능
CREATE VIEW v_viewtest1
AS
-- 컬럼이름 뒤에 뷰의 별칭을 AS로 선언, AS는 생략가능
SELECT B.mem_id AS '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키워드를 사용해 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 뷰이름;
뷰 정보 확인
CREATE OR REPLACE VIEW 구문은 생성하려는 뷰가 존재할떄 뷰를 삭제하고 다시 생성하는 키워드이다
DESC 혹은 DESCRIBE 키워드로 생성한 뷰의 정보를 조회가능
CREATE OR REPLACE VIEW v_view
AS
SELECT user, name, phone FROM member;
뷰에서는 PK등의 정보는 조회할 수 없음, 원본 테이블에서만 조회 가능
DESC v_user;
DESCRIBE v_user
SHOW CREATE VIEW구문으로 뷰의 소스코드 확인 가능
SHOW CREATE VIEW v_user;
뷰를 통한 데이터 변경
뷰를 통해 데이터를 변경할 수 있지만 권장되는 방법은 아님
원본 테이블에 걸려 있는 데이터의 제약조건을 맞추어야하고 데이터를 삽입했을때 뷰에 걸려있는 조건에 해당되지 않으면 데이터를 변경한 결과를 찾기가 번거로움
UPDATE v_user SET name = '강호동' WHERE id='15' ;
INSERT INTO v_user(id, name) VALUES('50','유재석') ;
제약 조건
WITH CHECK OPTION
뷰를 생성하거나 수정할 떄 조건을 추가해 조건에 해당되는 데이터만 입력되도록 설정
데이터가 입력될때 이름이 이수근이 아닌 데이터는 입력되지 않도록 설정
ALTER VIEW v_user
AS
SELECT * FROM user WHERE name = '이수근'
WITH CHECK OPTION ;
뷰 삭제
DROP VIEW로 삭제 할 수 있음
DROP VIEW 뷰이름
뷰가 참조하는 원본 테이블이 삭제 되었을때 오류가 발생 => 뷰가 참조하는 원본테이블의 상테를 조회 하여 에러 확인