티스토리 뷰

Mysql

Mysql - 뷰(View)란 무엇일까?

realizers 2022. 1. 9. 15:34
728x90
반응형

View란?


  • 데이터베이스에 존재하는 일종의 가상 테이블입니다.
  • 뷰를 이용하여 실제 테이블처럼 행과 열을 가지고 있지만 실제로 데이터를 저장하고 있지는 않습니다.
  • 데이터를 보여주는 역할만 수행합니다.
  • WHERE, SUB QUERY, UNION, JOIN 등 다양한 결합과 조건으로 만들어진 데이터를 뷰를 통해 가상 테이블을 만들어 편리하고 빠르게 데이터를 조회할 수 있습니다.

 

View의 장점


  • 특정 SELECT절을 이용하여 테이블의 전체가 아닌 필요한 필드만 보여줄 수 있습니다.
  • 복잡한 쿼리를 단순화할 수 있고 재사용할 수 있습니다.
  • 보안에 도움이 됩니다.

 

View의 단점


  • 한번 정의된 뷰는 변경할 수 없습니다.
  • 삽입, 삭제, 수정 작업에 많은 제한 사항을 가집니다.
  • 자신만의 인덱스를 가질 수 없습니다.

 

 

View를 사용하여 원본 테이블에 삽입, 수정이 불가능한 경우


  • 뷰의 단점으로 삽입, 수정에는 많은 제한 사항이 있다고 말했습니다.
  • 어떠한 제한 사항이 있는지 알아보겠습니다.
    • 원본 테이블에 NOT NULL인 값이 뷰에 생성되어 있지 않다면 삽입을 할 수 없습니다. 뷰를 통해 NOT NULL인 열을 입력할 수 없음
    • 집계 함수를 사용한 뷰(SUM, COUNT, AVG 등)
    • UNION, JOIN등을 사용한 뷰
    • DISTINCT, GROUP BY등을 사용한 뷰

 

View를 위한 예제 테이블


CREATE TABLE `books` (
  `code` int NOT NULL AUTO_INCREMENT,
  `bookName` varchar(20) NOT NULL,
  `bookPrice` double NOT NULL,
  `bookType` varchar(10) NOT NULL,
  PRIMARY KEY (`code`)
)

CREATE TABLE `books_sell` (
  `bookCode` int NOT NULL,
  `bookSellPrice` double NOT NULL,
  `bookType` varchar(10) NOT NULL,
  PRIMARY KEY (`bookCode`)
)

 

View 생성 방법


CREATE VIEW 뷰명칭 
AS 
SELECT 칼럼1, 칼럼2 ... FROM 테이블명;
/* 뷰 생성 */
CREATE VIEW books_view 
AS 
SELECT CODE, bookName, bookPrice FROM books;
/* 뷰 실행 */
SELECT * FROM books_view;

 

 

만들어진 뷰에 INSERT하기


  • 원본 테이블의 bookType칼럼이 NOT NULL 조건으로 설정되어 있습니다.
  • books_view의 뷰는 bookType칼럼을 추가하지 않습니다.
/* 오류 발생: 원본 테이블에는 bookType이 NOT NULL이므로 */
INSERT INTO books_view VALUES(4, '토끼와거북이', 30000);
  • 원본 테이블의 bookType 칼럼을 NOT NULL조건을 해지하면 정상적으로 INSERT가 가능합니다.

 

View 수정 방법


  • 뷰는 일부분만을 업데이트 할 수 없습니다. 전체를 덮어쓰기 한 형태로 업데이트 할 수 있습니다.
CREATE OR REPLACE VIEW books_view AS 
SELECT 
  CODE,
  bookName,
  bookPrice AS bookOriginPrice,
  bookSellPrice,
  books.bookType 
FROM
  books 
  LEFT JOIN books_sell 
    ON books_sell.bookCode = books.code;

 

View 삭제 방법


DROP VIEW books_view;
728x90
반응형

'Mysql' 카테고리의 다른 글

Mysql - 엔진 아키텍처  (0) 2022.04.14
Mysql - 시스템 변수  (0) 2022.04.12
Mysql - 커서(Cursor)란 무엇일까?  (0) 2022.01.07
Mysql - Procedure 프로시저 생성 및 조회  (0) 2022.01.05
Mysql - Function 함수 생성 및 조회  (0) 2022.01.05