Serial 타입


예시

CREATE TABLE TEMP_SERIAL_A (
    id SERIAL
   ,val INT
);

설명

Mysql의 AUTO_INCREMENT와 비슷한 역할을 수행한다.

내부적으로 카운터를 가지며, 행을 삽입할 때마다 카운터를 증가시키고

해당 카운터 값으로 컬럼 값을 자동 지정한다.

하지만 치명적인 단점이 있는데,

Mysql의 AUTO_INCREMENT는 언제나 자동적으로 해당 컬럼의 최댓값 + 1을 카운터로 갖는데 반해

SERIAL은 실제 값은 전혀 신경쓰지 않고 내부 카운터는 별도로 돌아간다는 점이다.

따라서 값이 수정되거나, 해당 컬럼의 값을 강제로 지정하여 삽입하는 경우가 있다면

필연적으로 값의 중복이 발생하게 된다.

Serial 타입의 실제 실행 쿼리

CREATE TABLE TEMP_SERIAL_A (
    id SERIAL
   ,val INT
);

위 쿼리는 실제로

CREATE SEQUENCE TEMP_SERIAL_A_ID_SEQ;

CREATE TABLE TEMP_SERIAL_A (
    id INT DEFAULT nextval('TEMP_SERIAL_A_ID_SEQ')
   ,val INT
);

ALTER SEQUENCE TEMP_SERIAL_A_ID_SEQ
OWNED BY TEMP_SERIAL_A.id;

이렇게 바뀌어 실행된다.

Mysql의 AUTO_INCREMENT 모방하기