성장일기

내가 보려고 정리하는 공부기록

데이터베이스/MariaDB

마리아DB (6) _ 뷰(View)

와나나나 2024. 5. 27. 16:59
728x90

이번 게시글에서는 뷰에 대해 다루어 볼 예정이다.

 

1. 뷰 (View) ?

뷰는 쉽게 이야기 하면 가상의 테이블이라고 할 수 있다. 기존의 테이블 데이터 중 자주 쓰는 데이터를 뷰로 만들어 읽기 전용으로 많이 사용하고, 수정도 가능하다. 즉 필요한 부분만 가져와서 테이블처럼 만든 것이다.

 

간단하게 뷰의 장단점을 정리하면 다음과 같다.

장점

  • 원하는 부분만 보기 좋게 가져올 수 있다
  • 데이터 관리에 용이하다

단점

  • 인덱스를 구성할 수 없다
  • 삽입, 수정 등 연산에 제약이 있다.

 

 

✅ 뷰의 DML (INSERT, UPDATE, DELETE) 조작이 불가능한 경우

  1. 뷰 정의에 포함되지 않는 열을 조작하는 경우
    • 원본 테이블의 A,B,C,D 열 중 A,B열로 테이블을 구성했다면, C열의 조작이 불가능함
  2.  산술 표현법으로 정의된 경우
  3. 그룹함수나 GROUP BY 절을 표함한 경우
    • 이 경우에 INSERT, UPDATE가 불가능하다
  4. 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;

 

 

 

다음 게시글에서는 인덱스와 프로시저에 대해 정리할 예정이다.