[MariaDB] VIEW

Geehyun(장지현)·2024년 2월 25일
1

MariaDB

목록 보기
12/12
post-thumbnail

VIEW

VIEW는 SELECT문의 결과를 담고 있는 가상의 테이블 입니다.

특정 데이터를 계속 활용해야할 때 뷰 테이블로 만들어 놓으면 다른데서 활용할 수 있습니다.

  • 장점
    • 길고 복잡한 셀렉트 구문을 저장해서 쓸 수 있어서 간편합니다.
    • 뷰로 저장하게 될 시 해당 뷰가 캐시에 올라가서 그냥 SELECT를 조회하는 것보다 속도가 빨라집니다.
    • 필요한 컬럼만 SELECT해서 보여주기 때문에 보안적으로 강점이 있습니다.
    • 주로 SELECT 용도이지만 DELETE / UPDATE / INSERT도 상황에 따라 사용 가능할 수 있습니다.
      다만, DELETE / UPDATE / INSERT 원본 테이블에서 DELETE / UPDATE / INSERT 된다는 점 유의해야합니다.
  • 단점
    • 해당 뷰테이블의 기준테이블 자체가 변경되면 에러가 날 수 있습니다.
    • 뷰를 정의하는 SELECT문에서 시스템 / 사용자 변수를 사용할 수 없습니다.

VIEW 생성

-- 사용법
CREATE [OR REPLACE] VIEW 뷰이름 AS
SELECT select 구문;

-- 사용예시
CREATE VIEW VW_ORDER_INFO_SELECT 
AS
SELECT
	MB.memberId, MB.name
	, OI.orderNo, OI.orderDate
	, OD.orderedCnt, OD.amount
	, GI.goodsCode, GI.goodsName, GI.state
FROM tbl_orderinfo AS OI
INNER JOIN tbl_orderdetail AS OD ON OD.orderNo = OI.orderNo
INNER JOIN tbl_goodsinfo AS GI ON GI.goodsCode = OD.goodsCode
INNER JOIN tbl_member AS MB ON MB.memberId = OI.memberId
;
  • 뷰이름은 VIEW_대문자영문명, v_테이블명, VW_테이블명 이런식으로 작성 합니다.
    => 해당 테이블이 뷰인지, 진짜 테이블인지 구분용
  • SELECT문 안에서 AS로 alias 로 컬럼명을 바꿔서 VIEW로 저장할 수 있습니다.
    => 원본테이블의 컬럼명을 숨길 수 있음
  • SELECT 생성쿼리 내 ORDER BY 정렬순서를 줘서 VIEW로 저장할 수 있습니다.
  • SELECT 생성쿼리 내 시스템 변수 / 사용자 변수를 을 이용할 수 없습니다.

VIEW 조회 / 삭제

VIEW를 조회하고 삭제하는 방법은 일반 테이블과 동일합니다.

조회

-- 사용법
# 스키마 조회
DESC 뷰테이블명;

# SELECT 조회
SELECT 컬럼1, 컬럼2,,,
FROM 뷰테이블명
WHERE 조건절
GROUP BY 컬럼,,,
HAVING 조건절
ORDER BY 컬럼 [정렬조건],,,
LIMIT [시작인덱스, ] 개수;

-- 사용예시
# 스키마 조회
DESC vw_order_info_select;

# SELECT 조회
SELECT * FROM vw_order_info_select;

삭제

-- 사용법
DROP 뷰테이블명;

-- 사용예시
DROP vw_order_info_select;

VIEW 데이터 추가 / 수정 / 삭제

VIEW에 INSERT / UPDATE / DELETE 경우는 해당 뷰를 만들 때 작성한 기본 테이블에 추가/수정/삭제하는 것이기 때문에

  1. 기본 테이블에서 NULL허용 불가인데 해당 컬럼을 뷰테이블에는 안갖고온 경우
  2. JOIN문을 사용해 뷰를 생성한 경우 JOIN해온 모든 테이블에서 1번이 한 건이라도 있는 경우
  3. infomation_schema.VIEWS 에서 해당 뷰의 IS_UPDATABLE 컬럼이 NO인 경우
   -- 조회 쿼리
   SELECT TABLE_NAME, IS_UPDATABLE
   FROM information_schema.VIEWS
   WHERE TABLE_SCHEMA = '데이터베이스명'
   ;

위 3가지 경우에는 INSERT/UPDATE/DELETE가 불가합니다.

INSERT

INSERT를 사용하는 방식은 일반테이블과 동일합니다.
다만, VIEW테이블에서 INSERT해도 원본테이블 자체에 데이터가 INSERT되어 VIEW에 반영되는 방식이라는 점을 명심해야합니다.

-- 사용법
INSERT INTO 뷰테이블명 (컬럼1, 컬럼2,,,)
VALUES (1,2,,,)
# 해당 뷰테이블 모든 컬럼에 대해 값입력 시 뷰테이블명 우측 괄호 생략가능

-- 사용예시
INSERT INTO VW_tbl_member(memberId, NAME, pwd, regDate)
VALUES('test2', '테스트회원2', '1234', NOW());

UPDATE

UPDATE를 사용하는 방식은 일반테이블과 동일합니다.
다만, VIEW테이블에서 UPDATE해도 원본테이블 자체에 데이터가 UPDATE되어 VIEW에 반영되는 방식이라는 점을 명심해야합니다.

-- 사용법
UPDEATE 뷰테이블명
SET 컬럼1 =1, 컬럼2 =2,,,
WHERE 조건절;

-- 사용예시
UPDATE VW_tbl_member
SET jumin = '345678-1234567', addr1 = '서울 금천구 독산1동'
	, birthday = '2000-12-25', jobCode = '06', mileage = 3000
	, memberState = 'Y', regDate = NOW()
WHERE memberId = 'memberId';

DELETE

DELETE를 사용하는 방식은 일반테이블과 동일합니다.
다만, VIEW테이블에서 DELETE해도 원본테이블 자체에 데이터가 DELETE되어 VIEW에 반영되는 방식이라는 점을 명심해야합니다.

-- 사용법
DELETE FROM 뷰테이블명	
WHERE 조건절;

-- 사용예시
DELETE FROM VW_tbl_member
WHERE memberId = 'test2';

참고

MariaDB로 따라 하며 배우는 SQL프로그래밍 데이터베이스 기초에서 실무까지 - 나익수, 서연경 지음
위 책을 공부하며 작성하고 있습니다!

profile
개발자를 꿈꾸는 병아리 (블로그 이전 준비중 입니다.)

0개의 댓글