2015년 4월 22일 수요일

SUNDB Auto Increment 컬럼 사용하기



1. Auto Increment (Identity Column) 사용하기


Table 생성시 Column 속성에 “GENERATED ALWAYS AS IDENTITY” 을 사용한다.


1.1. Auto Increment Column을 가진 Table 생성하기


# T1 table을 Auto Increment Column (c1)을 사용하도록 생성한다.

gSQL> CREATE TABLE t1 (c1 BIGINT GENERATED ALWAYS AS IDENTITY, c2 VARCHAR(200));

Table created.

gSQL> \DESC t1;

COLUMN_NAME TYPE                   IS_NULLABLE
----------- ---------------------- -----------
C1          NUMBER(19,0)           FALSE     
C2          CHARACTER VARYING(200) TRUE      


# Auto Increment Column(c1)을 제외한 나머지 column에 데이터 입력

gSQL> INSERT INTO t1 (c2) VALUES ('aaa');

1 row created.

gSQL> INSERT INTO t1 (c2) VALUES ('bbb'), ('ccc'), ('ddd');

3 rows created.

gSQL> SELECT * FROM t1;

C1 C2
-- ---
 1 aaa
 2 bbb
 3 ccc
 4 ddd

4 rows selected.

gSQL>





1.2. 일반 Column을 Auto Increment Column 으로 변경하기


데이터가 입력되어 있는 상태에서는 일반컬럼을 Auto Increment 컬럼으로 변경하는 것은 불가능하며, 별도의 Auto Increment 컬럼을 추가하여 사용한다.


# 일반적인 속성을 가진 Table 생성
gSQL> CREATE TABLE t1 (c1 INTEGER, c2 VARCHAR(100));

Table created.

gSQL> COMMIT;

Commit complete.

gSQL> INSERT INTO t1 VALUES (3, 'aaa'), (5, 'bbb'), (9, 'ccc');

3 rows created.

gSQL> SELECT * FROM t1;

C1 C2
-- ---
 3 aaa
 5 bbb
 9 ccc

3 rows selected.


# T1 table에 Auto Increment 컬럼 (c3)을 추가한다.
gSQL> ALTER TABLE t1 ADD COLUMN c3 INTEGER GENERATED ALWAYS AS IDENTITY;

Table altered.

gSQL> \DESC t1;

COLUMN_NAME TYPE                   IS_NULLABLE
----------- ---------------------- -----------
C1          NUMBER(10,0)           TRUE      
C2          CHARACTER VARYING(100) TRUE      
C3          NUMBER(10,0)           FALSE     


# Auto Increment 컬럼(c3)을 추가하면 자동으로 Increment 값이 저장된다.
gSQL> SELECT * FROM t1;

C1 C2  C3
-- --- --
 3 aaa  1
 5 bbb  2
 9 ccc  3

3 rows selected.


# 만일 기존에 사용중인 일반 컬럼(c1)을 더 이상 사용하지 않는 다면 unused 속성을 부여한다. (이것은 대량의 데이터가 입력되어 있을 경우 drop column 보다 효율적이다)

gSQL> ALTER TABLE t1 SET UNUSED COLUMN c1;

Table altered.

gSQL> \DESC t1;

COLUMN_NAME TYPE                   IS_NULLABLE
----------- ---------------------- -----------
C2          CHARACTER VARYING(100) TRUE      
C3          NUMBER(10,0)           FALSE     


gSQL> SELECT * FROM t1;

C2  C3
--- --
aaa  1
bbb  2
ccc  3

3 rows selected.


# 새로 추가한 Auto Increment 컬럼(c3)의 컬럼명을 변경하여 사용할수 있다.
gSQL> ALTER TABLE t1 RENAME COLUMN c3 TO c1;

Table altered.

gSQL> \DESC t1;

COLUMN_NAME TYPE                   IS_NULLABLE
----------- ---------------------- -----------
C2          CHARACTER VARYING(100) TRUE      
C1          NUMBER(10,0)           FALSE     


gSQL> SELECT * FROM t1;

C2  C1
--- --
aaa  1
bbb  2
ccc  3

3 rows selected.

# 지금부터는 Auto Increment 컬럼을 제외한 나머지 컬럼에만 데이터를 입력한다.
gSQL> INSERT INTO t1 (c2) VALUES ('ddd'), ('eee');

2 rows created.

gSQL> SELECT * FROM t1;

C2  C1
--- --
aaa  1
bbb  2
ccc  3
ddd  4
eee  5

5 rows selected.

gSQL>