CREATE TABLE TEMP_SERIAL_A (
id SERIAL
,val INT
);
Mysql의 AUTO_INCREMENT
와 비슷한 역할을 수행한다.
내부적으로 카운터를 가지며, 행을 삽입할 때마다 카운터를 증가시키고
해당 카운터 값으로 컬럼 값을 자동 지정한다.
하지만 치명적인 단점이 있는데,
Mysql의 AUTO_INCREMENT
는 언제나 자동적으로 해당 컬럼의 최댓값 + 1을 카운터로 갖는데 반해
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;
이렇게 바뀌어 실행된다.