[DB] Sequence는 뭐지?

Junkyu_Kang·2024년 3월 10일


개발을 할때 자동으로 키(KEY) 생성을 해야 할 경우 주로 사용한다.?

시퀀스(Sequence)란?

  • 데이터베이스에서 유일한 값을 생성하기 위해 사용되는 객체이다.
  • 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.
  • PK(기본키) 값을 생성하기 위해 사용한다.
  • SEQUENCE는 테이블과는 독립적으로 저장되고 생성된다.
  • 데이터베이스의 레코드를 식별하는 데에 활용한다.
  • 여러 테이블에서 사용될 수 있으며, 각 테이블의 기본 키 값을 생성하는 데 사용될 수 있다.
  • 메모리에 Cache되었을 때 SEQUENCE 값의 액세스 효율이 증가 한다.

시퀀스 특성

  • 시작 값(start value): 시퀀스의 시작 값을 지정한다.
  • 증가 값(increment by): 시퀀스의 값이 증가하는 크기를 나타낸다.
  • 최대값(max value) 및 최소값(min value): 시퀀스 값의 범위를 제한한다.
  • 순환(cycle): 최대값 또는 최소값에 도달하면 시퀀스 값을 다시 시작하도록 설정할 수 있다.

시퀀스는 주로 데이터베이스에서 기본 키 값을 생성하는 데 사용되며, 이는 기본 키의 고유성을 보장하기 위해 필요하다. 대부분의 데이터베이스 시스템에서 시퀀스를 지원하며, 사용 방법은 각 데이터베이스 시스템에 따라 다를 수 있다. 종종 시퀀스는 데이터베이스의 DDL(Data Definition Language)을 사용하여 생성하고 관리된다.

시퀀스 예제

CREATE SEQUENCE member_seq START WITH 1 INCREMENT BY 1;

package hellojpa;

import jakarta.persistence.*;

@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_seq_generator")
    @SequenceGenerator(name = "member_seq_generator", sequenceName = "member_seq", allocationSize = 1)
    private Long id;
    
    private String name;
    
    // 생성자, getter 및 setter 메서드는 생략합니다.
}

시퀀스의 수정 및 삭제
START WITH는 수정 할 수 없다. START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE 문장과 같다.

시퀀스의 수정 및 삭제 예제

ALTER SEQUENCE sequence_name RESTART WITH new_start_value;
DROP SEQUENCE sequence_name;

시퀀스를 수정 또는 삭제할 때는 주의해야 한다.
시퀀스를 수정하거나 삭제하기 전에 해당 시퀀스를 사용하는 모든 테이블 및 애플리케이션에서의 영향을 고려해야 하기 때문이다.
특히 시퀀스를 삭제할 때는 해당 시퀀스를 사용하는 테이블에서 시퀀스를 참조하는 외래 키나 다른 제약 조건이 있는지 확인해야 한다.

profile
강준규

0개의 댓글