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>' ]
ํ์ ๋งค๊ฐ ๋ณ์ยถ
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);SELECT seq_01.nextval; +---------+ | NEXTVAL | |---------| | 1 | +---------+๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ์คํํ๊ณ ์ํ์ค ๋ฒํธ๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ํ์ธํฉ๋๋ค.
SELECT seq_01.nextval; +---------+ | NEXTVAL | |---------| | 2 | +---------+์ด์ ํ ์ด๋ธ์ ์ฝ์ ํ๋ ๋์ ์ํ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
INSERT INTO sequence_test_table (i) VALUES (seq_01.nextval);SELECT i FROM sequence_test_table; +---+ | I | |---| | 3 | +---+
1์ด ์๋ 5์ฉ ์ฆ๊ฐํ๋ ์ํ์ค๋ฅผ ๋ง๋ญ๋๋ค.
CREATE OR REPLACE SEQUENCE seq_5 START = 1 INCREMENT = 5;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 | +---+---+----+----+๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ์คํํ๊ณ ์ํ์ค ๋ฒํธ๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ํ์ธํฉ๋๋ค. ๋ค์ ์ํ์ค ๋ฒํธ ์ธํธ๊ฐ ์ค๋จ๋ ์ด์ ๋ฌธ๋ณด๋ค 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 | +----+----+----+----+
์ด ์์์๋ ์ํ์ค๋ฅผ ์ด์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ๊ฐ ํ์ ๋ํ ๊ณ ์ ์๋ณ์๋ฅผ ์ ๊ณตํ ์ ์์์ ๋ณด์ฌ์ค๋๋ค.
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;SELECT i FROM sequence_demo ORDER BY i LIMIT 10; +----+ | I | |----| | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----+์ด ์ฟผ๋ฆฌ๋ ํ ์ด๋ธ์ ๊ฐ ํ์ ๊ณ ์ ํ ๊ฐ์ด ์์์ ๋ณด์ฌ์ค๋๋ค.
SELECT COUNT(i), COUNT(DISTINCT i) FROM sequence_demo; +----------+-------------------+ | COUNT(I) | COUNT(DISTINCT I) | |----------+-------------------| | 1024 | 1024 | +----------+-------------------+
์ํ์ค ์ฌ์ฉํ๊ธฐ ์์ ๋ ๋ง์ ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.