뷰 생성, 관리 및 시퀀스

2024. 10. 14. 13:57·🗄️ Backend/SQL

1. 뷰 (View)

개요

  • 뷰(View)는 하나 이상의 테이블에서 파생된 가상의 테이블입니다. 데이터베이스에서 뷰는 주로 자주 사용되는 데이터 집합을 정의하여 쿼리를 단순화하는 데 사용됩니다.
  • 뷰는 실제로 데이터를 저장하지 않으며, 원본 테이블의 데이터를 기반으로 실시간으로 제공됩니다.
  • 뷰를 통해 데이터 접근을 통제하고 보안을 강화할 수 있습니다.
  • 뷰 확인: 현재 데이터베이스에 정의된 뷰 목록을 확인하려면 다음 쿼리를 실행합니다:
      SELECT * FROM USER_VIEWS;

뷰의 종류

  • 단순 뷰: 한 개의 원본 테이블을 기반으로 생성된 뷰입니다.
  • 복합 뷰: 두 개 이상의 원본 테이블을 조인하여 생성된 뷰입니다.

2. 단순 뷰

  • 단순 뷰는 한 개의 원본 테이블에서 생성되며, 일부 DML(데이터 조작 언어) 작업이 가능합니다.
  • DML 제약 사항:
    • INSERT:
      • 뷰에서 정의된 가상 컬럼이 있을 경우 삽입할 수 없습니다.
      • 뷰가 선택하지 않은 NOT NULL 열이 기본 테이블에 존재할 경우에도 삽입이 불가합니다.
    • UPDATE:
      • 뷰에서 정의된 가상 컬럼이 있을 경우 수정할 수 없습니다.
      • ROWNUM이 포함된 뷰도 업데이트가 불가능합니다.
    • DELETE:
      • 그룹 함수, GROUP BY 절, 또는 DISTINCT 키워드가 포함된 뷰에서 삭제할 수 없습니다.

3. 복합 뷰

  • 복합 뷰는 두 개 이상의 테이블을 조인하여 생성됩니다.
  • 복합 뷰는 기본적으로 INSERT, UPDATE, DELETE와 같은 DML 작업을 지원하지 않습니다.

4. 뷰 생성 및 옵션

뷰 생성

  • 뷰를 생성하려면 다음과 같은 SQL 구문을 사용합니다:
      CREATE [OR REPLACE] VIEW 뷰이름 AS 서브쿼리;
  • 예시:
      CREATE OR REPLACE VIEW VIEW_EMP AS (
        SELECT EMPLOYEE_ID AS EMP_ID, FIRST_NAME, JOB_ID, SALARY
        FROM EMPLOYEES
        WHERE DEPARTMENT_ID = 60
      );

옵션

  • WITH CHECK OPTION: 뷰에서 조건을 만족하는 데이터만 수정 가능하게 설정합니다.

      CREATE OR REPLACE VIEW VIEW_EMP AS (
        SELECT EMPLOYEE_ID AS EMP_ID
        FROM EMPLOYEES
        WHERE DEPARTMENT_ID IN (60,70,80)
      ) WITH CHECK OPTION;
  • WITH READ ONLY: 뷰를 통해 데이터 조회만 가능하고, DML 작업(삽입, 수정, 삭제)은 불가능하게 설정합니다.

      CREATE OR REPLACE VIEW VIEW_EMP AS (
        SELECT EMPLOYEE_ID AS EMP_ID
        FROM EMPLOYEES
      ) WITH READ ONLY;

5. 뷰 데이터 검색 및 삭제

뷰 데이터 검색

  • 뷰의 데이터를 조회하는 SQL 문은 다음과 같습니다:
      SELECT * FROM 뷰이름;

뷰 삭제

  • 뷰를 삭제할 때는 다음과 같은 SQL 문을 사용합니다:
      DROP VIEW 뷰이름;

6. 시퀀스 (Sequence)

개요

  • 시퀀스는 자동으로 유일한 번호를 생성하여 주로 기본 키(PK) 값을 생성하는 데 사용됩니다.
  • 시퀀스 확인: 현재 데이터베이스에 정의된 시퀀스 목록을 확인하려면 다음 쿼리를 실행합니다:
      SELECT * FROM USER_SEQUENCES;

시퀀스 생성

  • 시퀀스를 생성하는 SQL 구문은 다음과 같습니다:
      CREATE SEQUENCE 시퀀스이름
      START WITH 시작값
      INCREMENT BY 증가값
      [MINVALUE 최소값]
      [MAXVALUE 최대값]
      [CYCLE NO CYCLE]
      [CACHE size]
      [NOORDER];
  • 예시:
      CREATE SEQUENCE DEPTS_SEQ
      START WITH 1
      INCREMENT BY 1
      MAXVALUE 10
      NOCACHE
      NOCYCLE;

시퀀스 수정

  • 시퀀스를 수정하는 SQL 문은 다음과 같습니다:
      ALTER SEQUENCE 시퀀스이름
      [START WITH 시작값]
      [INCREMENT BY 증가값]
      [MINVALUE 최소값]
      [MAXVALUE 최대값]
      [CYCLE NO CYCLE]
      [CACHE size]
      [NOORDER];
  • 예시:
      ALTER SEQUENCE DEPTS_SEQ MAXVALUE 1000;

시퀀스 조회 및 사용

  • 시퀀스의 현재 값을 조회하는 SQL 문은 다음과 같습니다:
      SELECT DEPTS_SEQ.CURRVAL FROM DUAL;
  • 시퀀스의 다음 값을 조회하고 사용하는 방법:
      SELECT DEPTS_SEQ.NEXTVAL FROM DUAL;
      INSERT INTO DEPTS VALUES (DEPTS_SEQ.NEXTVAL, 'EXAMPLE');

시퀀스 삭제

  • 시퀀스를 삭제하는 SQL 문은 다음과 같습니다:
      DROP SEQUENCE 시퀀스이름;

7. 오라클 시퀀스 작동 방식

  1. 시퀀스 생성: CREATE SEQUENCE 명령을 사용하여 시퀀스를 생성합니다. 시작값, 증가값, 최대값 등을 설정할 수 있습니다.
  2. 다음 값 가져오기: SELECT <시퀀스이름>.NEXTVAL 쿼리를 사용하여 다음 값을 가져옵니다. 이 값은 이미 사용된 값보다 1씩 증가합니다.
  3. 데이터 삽입: 레코드를 삽입할 때 시퀀스에서 가져온 값을 사용하여 고유한 식별자를 지정합니다.

예제:

-- customers 테이블 생성
CREATE TABLE customers (
  customer_id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  email VARCHAR2(100)
);

-- customer_id 시퀀스 생성
CREATE SEQUENCE customer_id_seq START WITH 1 INCREMENT BY 1 NOCACHE;

-- 고객 데이터 삽입
INSERT INTO customers (customer_id, name, email)
VALUES (customer_id_seq.NEXTVAL, '홍길동', 'hong@example.com');

INSERT INTO customers (customer_id, name, email)
VALUES (customer_id_seq.NEXTVAL, '이순신', 'lee@example.com');

8. 오라클 시퀀스 주의 사항

  • 시퀀스 값 충돌: 여러 사용자가 동시에 시퀀스의 다음 값을 요청할 경우 값 충돌이 발생할 수 있습니다. 이를 방지하기 위해 NOCACHE 옵션을 사용하는 것이 좋습니다.
  • 시퀀스 시작값 및 증가값 설정: 시작값과 증가값을 적절히 설정해야 하며, 음수 값을 사용하면 오류가 발생할 수 있습니다.
  • 시퀀스 권한 관리: CREATE SEQUENCE 권한이 있는 사용자만 시퀀스를 생성 및 수정할 수 있습니다.

9. 오라클 시퀀스 삭제 방법

  • 시퀀스를 삭제할 때는 DROP SEQUENCE 명령을 사용합니다. 다음은 시퀀스를 삭제하는 예시입니다:
      DROP SEQUENCE customer_id_seq;
  • 주의: 시퀀스를 삭제하면 생성된 값은 다시 사용할 수 없으므로, 삭제 전에 사용 여부를 꼼꼼히 확인해야 합니다.

10. 오라클 시퀀스 관련 권한

오라클 시퀀스는 다음과 같은 권한으로 제어됩니다:

  • CREATE SEQUENCE: 시퀀스를 생성할 수 있는 권한입니다.
  • ALTER SEQUENCE: 시퀀스를 수정할 수 있는 권한입니다.
  • DROP SEQUENCE: 시퀀스를 삭제할 수 있는 권한입니다.

이 권한은 각각 CREATE SEQUENCE, ALTER SEQUENCE, DROP SEQUENCE 명령을 사용할 때 필요합니다.


'🗄️ Backend > SQL' 카테고리의 다른 글

SQL 권한 및 사용자 생성 가이드  (0) 2024.10.15
SQL 인덱스 개요  (0) 2024.10.15
데이터베이스 제약조건의 종류와 예시  (0) 2024.10.14
데이터베이스 트랜잭션 및 테이블 관리  (0) 2024.10.14
SQL 서브쿼리 (Subquery)와 데이터 조작 명령어 (DML) 정리  (4) 2024.10.14
'🗄️ Backend/SQL' 카테고리의 다른 글
  • SQL 권한 및 사용자 생성 가이드
  • SQL 인덱스 개요
  • 데이터베이스 제약조건의 종류와 예시
  • 데이터베이스 트랜잭션 및 테이블 관리
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    백준
    쿼리
    jsp
    백엔드
    java기초
    자바
    java
    DML
    SQL
    GCP
    정처기
    Spring
    정보처리기사
    AWS
    ADsP
    스프링부트
    http
    스프링
    springboot
    데이터베이스
  • 최근 댓글

  • 최근 글

hjwjo
뷰 생성, 관리 및 시퀀스
상단으로

티스토리툴바