어느 날 화면 개발자가 동일 쿼리에서 데이터가 조회됐다가 안됬다가 한다고 한다.
음? 그럴 수가 있나?
그래서 쿼리를 받아 보았더니, 수집되는 테이블을 직접 조인하고 있는 쿼리였다.
해당 테이블은 데이터의 양도 많고, 수집되면서 Insert와 Update가 같은 트렉젝션에서 일어나는 테이블이었다.
예상컨데 분명 Update 하는 도중 Select를 해서 락(Lock)이 걸리는 경우라 생각했다.
"음.. 그렇다면 테이블을 분리하는 게 좋은데 "
라는 의견을 냈지만 프로젝트 막바지에 테이블을 분리해서 관리하도록 하는 로직이 들어가는 것은 확실히 부담이 있다.
해서 생각한 것이 뷰를 사용하는 것이다.
뷰(view)는 일반 사용자 입장에서는 테이블과 동일하게 사용되는 객체이지만, 사실 별로 테이블로 봐도 무방하겠지?
별도 테이블이기 때문에 락(Lock)에서도 자유로 울 것이라 생각했다.
뷰는 select 문으로 만들어진 테이블이라 생각하면 된다. 기본적으로 읽기 전용으로 사용하지만 뷰를 통해서 원 테이블의 데이터를 수정할 수도 있다.
뷰는 보안에 도움이 되는 점도 있고, 특정 정보로만 조회할 수 있도록 제공할 수 있기 때문이다.
또한 복잡한 조인 쿼리 등을 단순화시켜주기 때문에 꽤 괜찮은 기능이라 생각된다.
1. 뷰 생성하기
1
2
3
4
5
|
|
USE DB명;
CREATE VIEW v_뷰테이블명
AS SELECT a.col1 as '컬럼1', a.col2 as '컬럼2', b.col3 as '컬럼3'
FROM 테이블1 a INNER JOIN 테이블2 b on a.key1 = b.key2;
|
cs |
2. 뷰 수정하기
1
2
3
4
|
ALTER VIEW v_뷰테이블명
AS SELECT a.col1 as '컬럼1', a.col2 as '컬럼2', b.col3 as '컬럼3'
FROM 테이블1 a INNER JOIN 테이블2 b on a.key1 = b.key2;
|
|
cs |
3. 뷰 삭제 하기
1
2
3
4
|
DROP VIEW v_뷰테이블명
|
cs |
4. 뷰 정보 확인
1
|
DESCRIBE VIEW v_뷰테이블
|
|
cs |
5. 뷰 소스코드 확인
1
|
SHOW CREATE VIEW VIEW v_뷰테이블
|
cs |
6. 뷰로 원본 테이블 수정이나 입력이 불가능한 경우
- 원본에 NOT NULL인 값이 뷰에 생성되어 있지 않다면 입력 불가능, 뷰를 통해 NOT NULL 열을 입력할 수 없다.
- 집계 함수를 사용한 뷰(SUM 등)
- UNION ALL, JOIN 등을 사용한 뷰
- DISTINCT, GROUP BY 등을 사용한 뷰
반응형
'DB > MariaDB' 카테고리의 다른 글
[MariaDB] 마리아 DB 백업 및 복구 (0) | 2021.07.21 |
---|---|
[MariaDB] 마리아DB 재기동 (시작, 종료, 재시작) (0) | 2021.05.30 |
[MariaDB] 다중 In (0) | 2021.05.30 |
댓글