[SQL] 05-3 가상의 테이블: 뷰

김민서·2024년 7월 22일

혼자 공부하는 SQL

목록 보기
13/19

기본 개념

  1. 뷰는 데이터베이스 개체 중 하나임.

  2. 뷰는 한 번 생성해 놓으면 테이블이라고 생각하고 사용해도 될 정도로 테이블과 거의 동일한 개체로 취급함.
    1) 그러나, 뷰는 테이블처럼 데이터를 가지고 있지는 않음.
    2) 비유로 바탕화면의 바로가기 아이콘과 비슷함.

  3. 뷰의 실체는 SELECT 문으로 만들어져 있음.
    1) 뷰에 접근하는 순간 SELECT가 실행되고, 그 결과가 화면에 출력됨.

  4. 뷰는 단순 뷰와 복합 뷰로 나뉨.
    1) 단순 뷰: 하나의 테이블과 연관된 뷰
    2) 복합 뷰: 2개 이상의 테이블과 연관된 뷰

뷰의 개념

뷰의 기본 생성

  1. 혼공 테이블에 있는 파일 사용하여 SQL 실행 -> 회원 테이블 조회
    1) 뷰는 테이블의 모양을 가지고 있음.

    2) 위 사진에서 보이는 코드 아래는 데이터 삽입하는 코드임.

    3) 이 예제의 실행 결과를 v_member라고 부른다면, 앞으로는 v_member를 그냥 테이블이라고 생각하고 접근하면 됨.

  2. 뷰를 만드는 형식
    CREATE VIEW 뷰 이름
    AS
    SELECT 문;

  3. 뷰를 만든 후에 뷰에 접근하는 방식
    SELECT 열 이름 FROM 뷰 이름
    [WHERE 조건];

  4. 회원 테이블의 아이디, 이름, 주소에 접근하는 뷰 생성하기

  5. 필요한 열만 보거나 조건식을 넣을 수도 있음.

    1) 테이블과 동일함.
    2) 뷰는 테이블에 접근한 것과 동일한 결과를 얻을 수 있음.

뷰의 작동

  1. 사용자는 뷰를 테이블이라고 생각하고 접근함.
  2. MySQL이 뷰 안에 있는 SELECT를 실행해서 그 결과를 사용자에게 보내줌.
  3. 뷰는 기본적으로 읽기 전용으로 사용되지만, 뷰를 통해서 원본 테이블의 데이터를 수정할 수도 있음.

뷰를 사용하는 이유

  1. 보안에 도움이 됨.
    1) 앞의 예에서 만든 v_member의 경우, 사용자의 아이디, 이름, 주소만 있을 뿐 사용자의 중요한 개인정보인 연락처, 평균 키, 데뷔일자 등의 정보는 들어있지 않음.

  2. 복잡한 SQL을 단순하게 만들 수 있음.

뷰의 실제 작동

뷰의 실제 생성, 수정, 삭제

  1. 뷰에서 사용될 열 이름을 테이블과 다르게 지정할 수 있음.
    1) 별칭 사용하기 -> 중간에 띄어쓰기 사용 가능
    2) 별칭은 열 이름 뒤에 따옴표로 묶어주고, 형식상 AS를 붙임.
    3) 뷰를 조회할 때는 열 이름에 공백이 있으면 백틱(`)로 묶어줘야 함.

    4) 뷰를 생성할 때 뷰의 열 이름을 테이블과 다르게 지정할 수 있으며, 띄어쓰기나 한글도 가능함.

  2. 뷰의 수정은 ALTER VIEW 구문을 사용하며, 열 이름에 한글을 사용해도 됨.

  3. 뷰의 삭제는 DROP VIEW를 사용함.

뷰의 정보 확인

  1. 우선 간단한 뷰 다시 생성하기

  2. DESCRIBE 문으로 기존 뷰의 정보 확인하기

    1) 뷰도 테이블과 동일하게 정보를 보여줌.
    2) PRIMARY KEY 등의 정보는 확인되지 않음.

  3. SHOW CREATE VIEW 문으로 뷰의 소스코드도 확인 가능

뷰를 통한 데이터의 수정/삭제

  1. 뷰를 통해서 테이블의 데이터 수정하기

  2. 데이터 입력하기
    1) v_member가 참조하는 member의 열 중에서 mem_number 열은 NOT NULL로 설정되어서 반드시 입력해주어야 함.
    2) 그러나, 현재의 v_member에서는 mem_number을 참조하고 있지 않으므로 값을 입력할 방법이 없음.
    3) 만약 v_member 뷰를 통해 member 테이블에 값을 입력하고 싶다면, v_member에 mem_number 열을 포함하도록 뷰를 재정의하거나 member에서 mem_number 열의 속성을 NULL로 바꾸거리 기본값을 지정해야 함.
    4) 이번에는 지정한 범위로 뷰를 생성하기, 평균 키가 167 이상인 뷰를 생성하기

  3. v_height167 뷰에서 키가 167 미만인 데이터 삭제하기
    1) (당연히) 없다고 나옴.

뷰를 통한 데이터의 입력

  1. v_height167 뷰에서 키가 167 미만인 데이터 입력하기


    1) 예상치 못한 경로를 통해 입력되면 안되는 데이터가 입력된 느낌
    2) 물론, v_viewheight167을 살펴보았을 때 추가되진 않았음.

  2. 예약어 WITH CHECK OPTION을 통해 뷰에 설정된 값의 범위가 벗어나는 값은 입력되지 않도록 하기

    1) 키가 167 미만인 데이터를 삽입하자 에러가 발생함.

뷰가 참조하는 테이블의 삭제

  1. 뷰가 참조하는 테이블 삭제하기

  2. 현재 여러 개의 뷰가 두 테이블과 관련이 있는데도 테이블이 삭제됨. 두 테이블 중 아무거나 연관되는 뷰를 다시 조회하기
    1) 오류 발생

    2) 당연히 참조하는 테이블이 없기 때문임.
    3) 관련된 뷰가 있더라도 테이블은 쉽게 삭제됨.

  3. 뷰가 조회되지 않으면 CHECK TABLE 문으로 뷰의 상태 확인 가능
    1) 뷰가 참조하는 테이블이 없어서 오류가 발생하는 것 확인 가능

0개의 댓글