2015년 4월 22일 수요일

SUNDB Auto Increment 컬럼 사용하기



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


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


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


# T1 tableAuto 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. 일반 ColumnAuto 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 tableAuto 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>