Search
Duplicate

자동 채번(AUTO_INCREMENT) 컬럼이 있는 테이블의 데이터 이관하기

문서번호 : 11-697662

Document Information

최초 작성일 : 2022.05.13
최종 수정일 : 2022.07.14
이 문서는 아래 버전을 기준으로 작성되었습니다.
SinglestoreDB : 7.8

Goal

auto_increment 컬럼이 있는 테이블의 데이터 이관 방법을 알아본다.

Solution

이관 방안 1 (권장)

⇒ 먼저, 테이블에 데이터를 이관한 후, auto_increment 컬럼의 시작값을 자동으로 동기화 해 주는 명령어 AGGREGATOR SYNC AUTO_INCREMENT를 실행한다.
만약, 어그리게이터가 여러개 있을 경우, 어그리게이터별로 값의 범위(시작-끝)가 있으며, 각각의 범위내에서 자동 동기화 된다.
1.
데이터를 이관한다. (INSERT … SELECT를 사용한 예시)
INSERT INTO to_tbl SELECT * FROM from_tbl;
SQL
복사
주의) Insert … select 구문을 대신해 create table … select 구문을 사용할 경우, 생성 테이블에는 non-auto increment 컬럼으로 생성된다.
2.
데이터 이관이 완료된 후, AGGREGATOR SYNC AUTO_INCREMENT 명령어를 사용하여 auto_increment 컬럼의 시작값을 동기화 시킨다. 이 후 생성되는 값은 존재하는 data보다 큰 값이 된다.
문법
AGGREGATOR SYNC AUTO_INCREMENT [ON <database>[.<table>]] [ALL];
SQL
복사
ALL : 모든 어그리게이터에서 동기화됨
마스터 어그리게이터에서만 추가 가능함
쓰지 않으면 실행하는 어그리게이터만 동기화됨
테이블의 경우 데이터베이스명을 반드시 써야 함.
사용 예시
하나의 테이블만 동기화 (데이터베이스명 : test_db, 테이블명 : to_tbl)
AGGREGATOR SYNC AUTO_INCREMENT ON test_db.to_tbl ALL;
SQL
복사
특정 데이터베이스 전체 동기화
AGGREGATOR SYNC AUTO_INCREMENT ON test_db ALL;
SQL
복사
또는
use test_db; AGGREGATOR SYNC AUTO_INCREMENT ALL;
SQL
복사

이관 방안 2 (단, 참조테이블 일때만)

⇒ 테이블 생성시 auto_increment 컬럼의 시작값을 미리 설정해 줄 수 있다.
하지만, 참조테이블은 특별히 시작값을 지정하지 않더라도 최대값 다음부터 자동 채번된다. (예외사항 참고)
1.
이관하려는 테이블(이하, FROM) 에서의 auto_increment 컬럼의 최대 값을 확인한다.
a.
이때, 데이터가 추가되거나 하여, 값이 증가 되는지 확인하고, 여유 있게 증가 시킨다.
SELECT MAX(id) FROM to_tbl;
SQL
복사
2.
이관 받을 테이블(이하, TO) 생성시 AUTO_INCREMENT=n 구문을 추가하여 시작값을 설정한다. 단, 참조(REFERENCE) 테이블일 때만 지원되며, 이외의 경우 구문은 무시된다.
CREATE REFERENCE TABLE to_tbl (id int AUTO_INCREMENT PRIMARY KEY) AUTO_INCREMENT = 100;
SQL
복사
3.
데이터를 이관한다. (INSERT … SELECT를 사용한 예시)
INSERT INTO to_tbl SELECT * FROM from_tbl;
SQL
복사

예외 사항

참조(REFERENCE) 테이블의 경우, 임의의 값을 INSERT/UPDATE 시키더라도, 최대값 + 1로 자동 채번된다.
CREATE REFERENCE TABLE t(id INT AUTO_INCREMENT PRIMARY KEY); INSERT INTO t values(); INSERT INTO t values(5); INSERT INTO t values(); SELECT id FROM t ORDER BY id; +----+ | id | +----+ | 1 | | 5 | | 6 | +----+ -- UPDATE에 의해 새로운 최대값 이 생겼을때 : 그 최대값 + 1 부터 채번됨 UPDATE t SET id=9 WHERE id=5; -- 5->9로 UPDATE되면서 6보다 큰 값이됨 INSERT INTO t values(); SELECT id FROM t ORDER BY id; +----+ | id | +----+ | 1 | | 6 | | 9 | | 10 | +----+ -- 모두 지웠을때 : 기존 시작값 유지됨 DELETE FROM t; INSERT INTO t values(); SELECT id FROM t order by id; +----+ | id | +----+ | 11 | +----+
SQL
복사

References

History

일자
작성자
비고
2022.05.13
kkh
추가 수정: wee
2022.06.10
kkh
이관 방안으로 내용 수정
2022.07.14
kkh
내용 정리 및 방안별 설명 추가