728x90
이번 게시글에서는 뷰에 대해 다루어 볼 예정이다.
1. 뷰 (View) ?
뷰는 쉽게 이야기 하면 가상의 테이블이라고 할 수 있다. 기존의 테이블 데이터 중 자주 쓰는 데이터를 뷰로 만들어 읽기 전용으로 많이 사용하고, 수정도 가능하다. 즉 필요한 부분만 가져와서 테이블처럼 만든 것이다.
간단하게 뷰의 장단점을 정리하면 다음과 같다.
장점
- 원하는 부분만 보기 좋게 가져올 수 있다
- 데이터 관리에 용이하다
단점
- 인덱스를 구성할 수 없다
- 삽입, 수정 등 연산에 제약이 있다.
✅ 뷰의 DML (INSERT, UPDATE, DELETE) 조작이 불가능한 경우
- 뷰 정의에 포함되지 않는 열을 조작하는 경우
- 원본 테이블의 A,B,C,D 열 중 A,B열로 테이블을 구성했다면, C열의 조작이 불가능함
- 산술 표현법으로 정의된 경우
- 그룹함수나 GROUP BY 절을 표함한 경우
- 이 경우에 INSERT, UPDATE가 불가능하다
- JOIN으로 여러 테이블을 연결한 경우
- 이 경우에는 업데이트만 가능하다
2. 뷰의 생성, 수정, 삭제
뷰의 생성
뷰를 생성할 때에는 CREATE view 뷰이름 AS 서브쿼리 [WITH CHECK OPTION] 구문을 사용한다.
CREATE OR REPLACE VIEW v_employee
AS SELECT emp_id,
emp_name,
if(SUBSTRING(emp_no, 8, 1) = '1', '남자', '여자') AS 'gender' ,
salary
FROM employee;
만약 같은 이름의 뷰가 있으면 에러가 발생하기 때문에 OR REPLACE 옵션을 사용해 덮어쓸 수 있도록 해준다.
추가로 WITH CHECK OPTION 은 뷰의 조건에 벗어나게 데이터를 바꾸면 에러가 발생하게 하는 옵션이다. 이 옵션을 쓰지 않으면 에러가 발생하지 않는다.
뷰의 수정
뷰를 수정할 때에는 ALTER VIEW 뷰이름 AS 서브쿼리 구문을 사용한다.
ALTER VIEW v_usertbl
AS SELECT u.userId,
u.name,
b.prodName,
CONCAT(u.mobile1, u.mobile2) AS 'phone'
FROM usertbl u
INNER JOIN buytbl b ON u.userID = b.userID
;
사실 수정은 CREATE OR REPLACE 명령어로 대체할 수 있기 때문에 자주 쓰진 않는다고 한다!
뷰의 삭제
뷰를 삭제할 때에는 DROP VIEW 뷰이름 구문을 사용한다.
DROP VIEW v_job, v_usertbl;
다음 게시글에서는 인덱스와 프로시저에 대해 정리할 예정이다.
'데이터베이스 > MariaDB' 카테고리의 다른 글
마리아DB (7) _ 인덱스, 프로시저, 트리거 (1) | 2024.05.30 |
---|---|
마리아DB (5) _ 테이블 생성, 수정, 삭제하기 (0) | 2024.05.26 |
마리아DB _ 데이터모델링 (개념적, 논리적, 물리적 모델링 / 정규화) (0) | 2024.05.25 |
마리아DB (3) _ 서브쿼리 작성하기 (0) | 2024.05.23 |
마리아DB (2) _ 윈도우함수, 조인 (0) | 2024.05.23 |