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
'Database > Goldilocks' 카테고리의 다른 글
[GOLDILOCKS] 쿼리 옵티마이저, 쿼리 최적화, QUERY OPTIMIZER 알아보기 (0) | 2018.05.22 |
---|---|
[GOLDILOCKS] SQL 함수 사용해보기 (0) | 2018.05.21 |
[GOLDILOCKS] 데이터 타입 알아보기 (0) | 2018.05.18 |
ERR-HYT00(13039): Exceeded maximum query time (0) | 2018.04.27 |
ERR-42000(16457): the connection map of cluster member 'G1N1' is mismatch with local connection map (0) | 2018.04.23 |