본문 바로가기

교육

MariaDB에서 SEQUENCE가 CYCLE인지 여부 확인하는 방법과 CYCLE로 변경하는 방법

반응형

 

1️⃣ 현재 SEQUENCE가 CYCLE인지 확인하는 방법

방법 1: SHOW CREATE SEQUENCE

SHOW CREATE SEQUENCE sequence_name;

출력 예:

CREATE SEQUENCE `order_seq`
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1
  MAXVALUE 1000
  CACHE 1000
  NOCYCLE;

→ CYCLE 또는 NOCYCLE 확인


✅ 방법 2: information_schema 조회

SELECT SEQUENCE_NAME,
       CYCLE_OPTION
FROM information_schema.SEQUENCES
WHERE SEQUENCE_SCHEMA = 'your_db'
  AND SEQUENCE_NAME = 'sequence_name';

결과:

SEQUENCE_NAMECYCLE_OPTION

order_seq YES / NO
  • YES → CYCLE
  • NO → NOCYCLE

MariaDB 10.3 이상에서 SEQUENCE 지원


2️⃣ 기존 SEQUENCE를 CYCLE로 변경하는 방법

MariaDB는 ALTER SEQUENCE 지원합니다.

✅ CYCLE로 변경

ALTER SEQUENCE sequence_name
CYCLE;

✅ NOCYCLE로 변경

ALTER SEQUENCE sequence_name
NOCYCLE;

3️⃣ 예제 전체 흐름

현재 상태 확인

SHOW CREATE SEQUENCE order_seq;

CYCLE 적용

ALTER SEQUENCE order_seq CYCLE;

다시 확인

SHOW CREATE SEQUENCE order_seq;

4️⃣ CYCLE 동작 방식 설명

예:

CREATE SEQUENCE test_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 3
CYCLE;

실행 결과:

1 → 2 → 3 → 1 → 2 → 3 ...

CYCLE이 없으면:

1 → 2 → 3 → ERROR (MAXVALUE 초과)

5️⃣ 주의사항 (실무 중요)

  1. MAXVALUE / MINVALUE 범위 반드시 확인
  2. AUTO_INCREMENT 대체용으로 쓰는 경우 CYCLE 사용 시 PK 충돌 가능
  3. 운영 DB에서 변경 전 반드시 현재 MAX 사용값 확인
SELECT NEXTVAL(sequence_name);

6️⃣ 버전 확인

SELECT VERSION();

SEQUENCE는 MariaDB 10.3 이상에서 지원됩니다.

 

 

MariaDB 10.6.7인데

Unknown table 'sequences' in information_schema

오류가 발생했다면, 이것은 해당 객체가 "진짜 SEQUENCE 객체"가 아니라 sequence 엔진 기반 테이블일 가능성이 매우 높습니다.

MariaDB는 두 가지 방식이 있습니다:

1️⃣ ANSI SQL SEQUENCE 객체 (CREATE SEQUENCE)
2️⃣ SEQUENCE storage engine 테이블 (ENGINE=SEQUENCE)

두 방식은 완전히 다릅니다.


🔎 1️⃣ 먼저 진짜 SEQUENCE인지 확인

SHOW FULL TABLES WHERE Table_type = 'SEQUENCE';

또는

SHOW CREATE TABLE your_sequence_name;

결과가 아래처럼 나오면 👇

ENGINE=SEQUENCE

→ 이건 SEQUENCE 엔진 테이블입니다.
→ information_schema.SEQUENCES에 나오지 않습니다.


🔎 2️⃣ ANSI SEQUENCE 객체인지 확인

SHOW CREATE SEQUENCE your_sequence_name;

이 명령이 실패하면 → ANSI SEQUENCE가 아닙니다.


🎯 왜 information_schema.SEQUENCES가 없을까?

MariaDB 10.6에서도:

  • information_schema.SEQUENCES는 ANSI SEQUENCE 객체가 있을 때만 존재
  • 단순히 SEQUENCE 엔진 테이블만 있으면 생성되지 않음

확인:

SHOW TABLES FROM information_schema LIKE 'SEQUENCE%';

🧠 가장 가능성 높은 상황

대부분 실무 10.x 환경에서는 아래 방식으로 생성했을 가능성이 큼:

CREATE TABLE order_seq
ENGINE=SEQUENCE;

이 경우:

  • CYCLE 개념 없음
  • ALTER SEQUENCE 문법 사용 불가
  • 옵션은 CREATE 시에만 설정 가능

📌 SEQUENCE 엔진에서 CYCLE 여부 확인 방법

SHOW CREATE TABLE order_seq;

출력 예:

CREATE TABLE `order_seq` (
  `next_not_cached_value` bigint(21) NOT NULL,
  ...
) ENGINE=SEQUENCE
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 1000
CACHE 1000
CYCLE;

여기서 CYCLE / NOCYCLE 확인


🔧 CYCLE로 변경하는 방법 (SEQUENCE 엔진인 경우)

SEQUENCE 엔진은 ALTER로 CYCLE 변경 불가
→ 반드시 DROP 후 재생성 필요

절차

-- 1. 현재 값 백업
SELECT NEXTVAL(order_seq);

-- 2. DROP
DROP TABLE order_seq;

-- 3. 재생성
CREATE TABLE order_seq
ENGINE=SEQUENCE
START WITH 1000
INCREMENT BY 1
MINVALUE 1
MAXVALUE 999999
CYCLE;

⚠ 운영 환경에서는 반드시 현재 값 기준으로 START WITH 설정


🏁 정리

구분ANSI SEQUENCEENGINE=SEQUENCE

SHOW CREATE SEQUENCE O X
information_schema.SEQUENCES O X
ALTER SEQUENCE CYCLE O X
DROP 없이 변경 O X

📌 지금 환경에서 정확히 진단하는 방법

아래 두 개 실행 결과를 알려주시면 정확히 분석해 드리겠습니다:

SHOW CREATE TABLE your_sequence_name;
SHOW FULL TABLES WHERE Table_type='SEQUENCE';

현재 상황은 거의 90% 확률로 ENGINE=SEQUENCE 방식입니다.

 

 

반응형