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>