GOLDILOCKS 의 IDENTITY 컬럼 지원 속성



 - GENERATED BY DEFAULT AS IDENTITY

 - GENERATED ALWAYS AS IDENTITY



GENERATED BY DEFAULT AS IDENTITY 제약사항 및 사용예제



제약사항

 1. 사용자가 값을 지정한 경우 이를 적용하나, 지정되지 않은 경우 자동값을 생성한다.

 2. 사용자가 값을 지정한 경우, 자동값은 증가하지 않는다.



사용예제

 1. 테이블을 생성합니다.

gSQL> CREATE TABLE T1 (C1 INT GENERATED BY DEFAULT AS IDENTITY, C2 INT);

Table created.

 2. C2 컬럼에 데이터를 삽입합니다.

gSQL> INSERT INTO T1 (C2) VALUES (1); 1 row created. gSQL> INSERT INTO T1 (C2) VALUES (2); 1 row created.

 3. T1 테이블의 데이터를 조회합니다. C1 컬럼의 값이 자동생성 및 증가되었다는 것을 알 수 있습니다.

gSQL> SELECT * FROM T1; C1 C2 -- -- 1 1 2 2 2 rows selected.

 4. C1, C2 컬럼에 데이터를 삽입합니다.

gSQL> INSERT INTO T1 (C1, C2) VALUES (3, 3);

1 row created.

gSQL> INSERT INTO T1 (C2) VALUES (4);

1 row created.

 5. C1 컬럼에 데이터를 직접 넣었을 때, 자동값이 증가하지 않음을 알 수 있습니다.

gSQL> select * from t1;

C1 C2
-- --
 1  1
 2  2
 3  3
 3  4

4 rows selected.



GENERATED ALWAYS AS IDENTITY 제약사항 및 사용예제



제약사항

 1. 사용자가 값을 지정할 수 없으며, 자동으로 값이 증가한다.


사용예제

 1. 테이블을 생성합니다.

gSQL> CREATE TABLE T1 (C1 INT GENERATED ALWAYS AS IDENTITY , C2 INT); Table created.

 2. 데이터를 적재합니다.

gSQL> INSERT INTO T1 (C2) VALUES (1); 1 row created. gSQL> INSERT INTO T1 (C2) VALUES (2); 1 row created.

 3. C1 컬럼에 값을 지정하려고 시도하는 경우, 에러가 발생합니다.

GSQL> INSERT INTO T1 (C1, C2) VALUES (3, 3); ERR-42000(16399): cannot insert or update a generated always identity column, value shall be a DEFAULT : INSERT INTO T1 (C1, C2) VALUES (3, 3) * ERROR at line 1:


데이터베이스를 재시작 하는 경우 위의 값들은 어떻게 될까?



T1 테이블을 생성한 뒤에 데이터를 적재합니다.

gSQL> CREATE TABLE T1 (C1 INT GENERATED ALWAYS AS IDENTITY , C2 INT)
gSQL> INSERT INTO T1 (C2) VALUES (1)
gSQL> COMMIT;
gSQL> SELECT * FROM T1;

C1 C2
-- --
 1  1

1 row selected.


데이터베이스를 재시작 후, 데이터를 적재한 뒤 C1 컬럼을 조회하면 2 가 아니라 21 로 설정됩니다.

gSQL> INSERT INTO T1 (C2) VALUES (2);
gSQL> COMMIT;
gSQL> SELECT * FROM T1;

C1 C2
-- --
 1  1
21  2

2 rows selected.


왜그럴까요?

데이터베이스가 내려갔다 올라오면서, IDENTITY 컬럼의 다음값이 캐시에 설정된 값으로 설정되기 때문입니다.

따라서 IDENTITY 커럼이 있는 경우 디비를 재구동 전, 현재 값을 반드시 확인한 후 재구동 후에 변경작업을 수행해주어야 합니다.

TABLE_NAME COLUMN_NAME RESTART_VALUE INCREMENT_BY MINVALUE            MAXVALUE ALTER_NEXT_SQL                                
---------- ----------- ------------- ------------ -------- ------------------- ----------------------------------------------
T1         C1                     41            1        1 9223372036854775807 ALTER TABLE X1 ALTER COLUMN C1 RESTART WITH 22


블로그 이미지

사용자 꽁담