CREATE SEQUENCEยถ

์ˆœ์ฐจ์ ์ธ ๊ณ ์œ  ๋ฒˆํ˜ธ ์ƒ์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ ์‹œํ€€์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ค‘์š”

Snowflake๋Š” ๊ฐ„๊ฒฉ์ด ์—†๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ๊ฐ€ ์ƒ์„ฑ๋จ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ˆซ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์—ฐ์†์ ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹œํ€€์Šค ์‚ฌ์šฉํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ:

DROP SEQUENCE , ALTER SEQUENCE , SHOW SEQUENCES , DESCRIBE SEQUENCE

๊ตฌ๋ฌธยถ

CREATE [ OR REPLACE ] SEQUENCE [ IF NOT EXISTS ] <name>
  [ WITH ]
  [ START [ WITH ] [ = ] <initial_value> ]
  [ INCREMENT [ BY ] [ = ] <sequence_interval> ]
  [ { ORDER | NOORDER } ]
  [ COMMENT = '<string_literal>' ]
Copy

ํ•„์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

name

์‹œํ€€์Šค์— ๋Œ€ํ•œ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•˜๋Š”๋ฐ, ์‹œํ€€์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ์‹๋ณ„์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์‹๋ณ„์ž๋Š” ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ์ „์ฒด ์‹๋ณ„์ž ๋ฌธ์ž์—ด์„ ํฐ๋”ฐ์˜ดํ‘œ(์˜ˆ: "My object")๋กœ ๋ฌถ์ง€ ์•Š๋Š” ํ•œ ๊ณต๋ฐฑ์ด๋‚˜ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์‹๋ณ„์ž๋„ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์‹๋ณ„์ž์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹๋ณ„์ž ์š”๊ตฌ ์‚ฌํ•ญ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์„ ํƒ์  ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

START [ WITH ] [ = ] initial_value

์‹œํ€€์Šค์—์„œ ๋ฐ˜ํ™˜๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. 64๋น„ํŠธ 2์˜ ๋ณด์ˆ˜ ์ •์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค(-2^63 ~ 2^63 - 1).

๊ธฐ๋ณธ๊ฐ’: 1

INCREMENT [ BY ] [ = ] sequence_interval

์‹œํ€€์Šค์˜ ๋‹จ๊ณ„ ๊ฐ„๊ฒฉ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์–‘์˜ ์‹œํ€€์Šค ๊ฐ„๊ฒฉ n ์˜ ๊ฒฝ์šฐ, ๊ทธ๋‹ค์Œ n-1 ๊ฐ’์€ ๊ฐ ์‹œํ€€์Šค ํ˜ธ์ถœ์— ์˜ํ•ด ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

  • ์Œ์˜ ์‹œํ€€์Šค ๊ฐ„๊ฒฉ -n ์˜ ๊ฒฝ์šฐ, ๊ทธ๋‹ค์Œ์œผ๋กœ ๋‚ฎ์€ n-1 ๊ฐ’์€ ๊ฐ ์‹œํ€€์Šค ํ˜ธ์ถœ์— ์˜ํ•ด ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๊ฐ’์€ 64๋น„ํŠธ 2์˜ ๋ณด์ˆ˜ ์ •์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”, 0์ด ์•„๋‹Œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: 1

{ ORDER | NOORDER }

๊ฐ’์ด ์˜ค๋ฆ„์ฐจ์ˆœ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ ์œผ๋กœ ์‹œํ€€์Šค์— ๋Œ€ํ•ด ์ƒ์„ฑ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ORDER๋ฅผ ์ง€์ •ํ•˜๋ฉด ์‹œํ€€์Šค ๋˜๋Š” ์ž๋™ ์ฆ๋ถ„ ์—ด์— ๋Œ€ํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฐ’์ด ์˜ค๋ฆ„์ฐจ์ˆœ(๋˜๋Š” ๊ฐ„๊ฒฉ์ด ์Œ์ˆ˜ ๊ฐ’์ธ ๊ฒฝ์šฐ์—๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ)์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ์‹œํ€€์Šค ๋˜๋Š” ์ž๋™ ์ฆ๊ฐ€ ์—ด์— START 1 INCREMENT 2 ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒ์„ฑ๋œ ๊ฐ’์€ 1, 3, 5, 7, 9 ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • NOORDER๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ฐ’์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ํ‘œ์‹œ๋˜๋„๋ก ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ์‹œํ€€์Šค์— START 1 INCREMENT 2 ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒ์„ฑ๋œ ๊ฐ’์€ 1, 3, 101, 5, 103 ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    NOORDER๋Š” ์—ฌ๋Ÿฌ INSERT ์ž‘์—…์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ INSERT ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ) ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: NOORDER_SEQUENCE_AS_DEFAULT ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋˜๋Š” ์†์„ฑ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

COMMENT = 'string_literal'

์‹œํ€€์Šค์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: ๊ฐ’ ์—†์Œ

์•ก์„ธ์Šค ์ œ์–ด ์š”๊ตฌ ์‚ฌํ•ญยถ

์ด ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ญํ•  ์—๋Š” ์ตœ์†Œํ•œ ๋‹ค์Œ ๊ถŒํ•œ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ

์˜ค๋ธŒ์ ํŠธ

์ฐธ๊ณ 

CREATE SEQUENCE

์Šคํ‚ค๋งˆ

์Šคํ‚ค๋งˆ์˜ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ƒ์œ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ USAGE ๊ถŒํ•œ.

์ง€์ •๋œ ๊ถŒํ•œ ์„ธํŠธ๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ• ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ•  ๋งŒ๋“ค๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ณด์•ˆ ์˜ค๋ธŒ์ ํŠธ ์— ๋Œ€ํ•ด SQL ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์—ญํ• ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๋Š” ์•ก์„ธ์Šค ์ œ์–ด์˜ ๊ฐœ์š” ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • ์‹œํ€€์Šค๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์—๋Š” ์‹œํ€€์Šค์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’/์ดˆ๊ธฐ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์‹œํ€€์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ฐญ์ด ์—†๋Š” ์‹œํ€€์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ’์€ (ํ•œ๊ณ„์— ์ด๋ฅผ ๋•Œ๊นŒ์ง€) ์ฆ๊ฐ€ํ•˜๊ณ  ๊ณ ์œ ํ•˜์ง€๋งŒ, ๊ผญ ์—ฐ์†์ ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ƒํ•œ๊ณผ ํ•˜ํ•œ์„ ํฌํ•จํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹œํ€€์Šค ์˜๋ฏธ ์ฒด๊ณ„ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ จ:

    ์ฃผ์˜

    ๊ณ ๊ฐ์€ Snowflake ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ(์‚ฌ์šฉ์ž ์˜ค๋ธŒ์ ํŠธ ์ œ์™ธ), ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ, ์ˆ˜์ถœ ํ†ต์ œ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ธฐํƒ€ ๊ทœ์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์ž…๋ ฅ๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Snowflake์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • OR REPLACE ๋ฐ IF NOT EXISTS ์ ˆ์€ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฌธ์ž๋ฅผ ๊ฐ™์€ ๋ฌธ์— ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • CREATE OR REPLACE <์˜ค๋ธŒ์ ํŠธ> ๋ฌธ์€ ์›์ž์„ฑ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ด์ „ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์ƒˆ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์˜ˆยถ

๋‹ค์Œ์€ ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

CREATE OR REPLACE SEQUENCE seq_01 START = 1 INCREMENT = 1;
CREATE OR REPLACE TABLE sequence_test_table (i INTEGER);
Copy
SELECT seq_01.nextval;
+---------+
| NEXTVAL |
|---------|
|       1 |
+---------+
Copy

๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ณ  ์‹œํ€€์Šค ๋ฒˆํ˜ธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

SELECT seq_01.nextval;
+---------+
| NEXTVAL |
|---------|
|       2 |
+---------+
Copy

์ด์ œ ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…ํ•˜๋Š” ๋™์•ˆ ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

INSERT INTO sequence_test_table (i) VALUES (seq_01.nextval);
Copy
SELECT i FROM sequence_test_table;
+---+
| I |
|---|
| 3 |
+---+
Copy

1์ด ์•„๋‹Œ 5์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œํ€€์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

CREATE OR REPLACE SEQUENCE seq_5 START = 1 INCREMENT = 5;
Copy
SELECT seq_5.nextval a, seq_5.nextval b, seq_5.nextval c, seq_5.nextval d;
+---+---+----+----+
| A | B |  C |  D |
|---+---+----+----|
| 1 | 6 | 11 | 16 |
+---+---+----+----+
Copy

๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ณ  ์‹œํ€€์Šค ๋ฒˆํ˜ธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์‹œํ€€์Šค ๋ฒˆํ˜ธ ์„ธํŠธ๊ฐ€ ์ค‘๋‹จ๋œ ์ด์ „ ๋ฌธ๋ณด๋‹ค 5 ๋” ๋†’์€ ๋ฒˆํ˜ธ๋ถ€ํ„ฐ ์‹œ์ž‘๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋Š” 20 ๋” ๋†’์€ ๋ฒˆํ˜ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(5 * 4, ์—ฌ๊ธฐ์„œ 5๋Š” ์ฆ๋ถ„์˜ ํฌ๊ธฐ์ด๊ณ  4๋Š” ๋ฌธ์—์„œ NEXTVAL ์ž‘์—…์˜ ์ˆ˜์ž„).

SELECT seq_5.nextval a, seq_5.nextval b, seq_5.nextval c, seq_5.nextval d;
+----+----+----+----+
|  A |  B |  C |  D |
|----+----+----+----|
| 36 | 41 | 46 | 51 |
+----+----+----+----+
Copy

์ด ์˜ˆ์—์„œ๋Š” ์‹œํ€€์Šค๋ฅผ ์—ด์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์— ๋Œ€ํ•œ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

CREATE OR REPLACE SEQUENCE seq90;
CREATE OR REPLACE TABLE sequence_demo (i INTEGER DEFAULT seq90.nextval, dummy SMALLINT);
INSERT INTO sequence_demo (dummy) VALUES (0);

-- Keep doubling the number of rows:
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
Copy
SELECT i FROM sequence_demo ORDER BY i LIMIT 10;
+----+
|  I |
|----|
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
+----+
Copy

์ด ์ฟผ๋ฆฌ๋Š” ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์— ๊ณ ์œ ํ•œ ๊ฐ’์ด ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

SELECT COUNT(i), COUNT(DISTINCT i) FROM sequence_demo;
+----------+-------------------+
| COUNT(I) | COUNT(DISTINCT I) |
|----------+-------------------|
|     1024 |              1024 |
+----------+-------------------+
Copy

์‹œํ€€์Šค ์‚ฌ์šฉํ•˜๊ธฐ ์—์„œ ๋” ๋งŽ์€ ์˜ˆ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.