์ต๊ทผ ์งํ์ค์ธ ํ๋ก์ ํธ์์ ํธ๋ฌ๋ธ ์ํ ํ๋ ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์ ์ ์ ์ด๋ณผ๊น ํ๋ค.
๊ฐ๋ฐํ๋ ๋ก์ง flow๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด, ์ฌ๋ฌ ์์คํ ์ ์๋ ๊ณ ๊ฐ์ ์ถ์ถํ์ฌ ์ค๋ณต ๊ณ ๊ฐ์ ํตํฉํ๊ณ ์ ๊ท ์์คํ ์ ์ด๊ดํ๋ ETL ์์ ์ด๋ค. ์์ ํ๊ฒฝ์ ๊ณ ๊ฐ์ฌ์ DB ์๋ฒ๋ฅผ ์ฌ์ฉํ๋๋ฐ CentOS 7์ MariaDB๋ฅผ rpm์ผ๋ก ์ค์นํ์ฌ 5.x ๋ฒ์ ์ผ๋ก ์ค์น๊ฐ ๋์ด ์์๋ค.
๋ฌธ์ ๋ ์ ๊ท ๊ณ ๊ฐ์ Insert ํ๋ ๊ณผ์ ์์ ๋ฐ์ํ๋๋ฐ..
๊ทธ ์ ์ ์ ๊น ์์ ์๋ ๋น์ทํ ํ๋ก์ ํธ๋ฅผ ํ ์ ์ด ์์๋๋ฐ ๊ทธ ๋น์ ๊ณ ๊ฐ์ฌ DB Server๋ Oracle์ ์ฌ์ฉํ์ด์, ์ํ์ค๋ฅผ ์์ฑํ์ฌ nextval, currval๋ก ID๋ฅผ return ๋ฐ์ ์ ์์๋ค.
๋น์ฐํ ์ด๋ฒ์๋ ์ํ์ค๋ฅผ ์์ฑํด์ ID๋ฅผ ๋ฐ์์ผ์ง ํ์ง๋ง...
๊ทธ๋ฌ๋ค.. MariaDB๋ ์ํ์ค๋ฅผ 10.3 ๋ฒ์ ์ดํ์ ์ง์์ ํ์๋ค.๐
๊ทธ๋์ ๋ช๊ฐ์ง ๋์ฑ ์ ์ธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋ค.
1. ๊ณ ๊ฐ์ฌ์ MariaDB ๋ฒ์ ์ํฅ ์์ฒญ โ
์ฐ์ ์ต์ ๋ฒ์ ์ด๋ผ๋ฉด, ์ํ์ค ์์ฑ์ด ๊ฐ๋ฅํ๋ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ๋ฌธ์ ์๋ค. 10.3 ๋ถํฐ ์ํ์ค๋ฅผ ์ง์ํ๋ ๊ทธ ์ดํ ๋ฒ์ ์ค์ 10.6 LTS ๋ฒ์ ์ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๋ค ์ถ์ด ์์ฒญ์ ๋๋ ธ๋ค. ํ์ง๋ง ์์ธํ ์ด์ ๋ ๋ชจ๋ฅด์ง๋ง (๊ณ ๊ฐ์ฌ๊ฐ ๊ณต๊ธฐ์ ์ด๋ผ ๊ทธ๋ด์ง๋?) ์ ํด์ง ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ณ๊ฒฝํ๋ค๋ ๊ฒ์ด ์ฝ์ง ์์๋ค. ๋ณ๊ฒฝ์ด ๋๋๋ผ๋ ๊ทธ ์ ์ฐจ๋ ๊ต์ฅํ ์ค๋๊ฑธ๋ฆด ๊ฒ์ ์ธ์งํ์ฌ, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ณด์๋ค.
2. select max(id) from user; โ
๋จ์ํ๊ฒ max๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ๋ ๊น ํ์ง๋ง, ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์์๋ ๊ณ ๊ฐ Insert๊ฐ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋์์ฑ ๋ฌธ์ ๋ก ์ฌ์ฉํ๊ธฐ์ ์ํํ๋ค.
3. ID ๋ฐ๊ธ์ ๋ํด ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ Auto Increment๋ฅผ ์ฌ์ฉํ๊ณ , ETL ๋ก์ง์ ๋์ ๋ฒํธ(์๋ฅผ ๋ค์ด 1์ต)๋ถํฐ ์์ ๐บ
์ด๋ฒ์ ๊ฒฝ๋ ฅ์ด ๋ง์ ํ์๋ถ๊ป ๋์์ ๊ตฌํ๋๋, ID๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๋๊ฒ ์ด๋ป๊ฒ ๋๋ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ๋ค๋ฅธ ๊ณณ์์ ๋ฐ์ํ๋ ๊ณ ๊ฐ Insert๋ DB์ Auto Increment๋ฅผ ์ด์ฉํ๊ณ , ETL์์๋ ๋ณ๋์ ์ํ์ค๋ฅผ ๊ด๋ฆฌํ์ฌ ๋์ ๋ฒํธ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ถ์ฌํ๋ผ๋ ๊ฒ์ด์๋ค.
์ข์ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ด๋ผ ํ์ จ๊ณ ๋ ๋ํ ๊ทธ๋ ๊ฒ ์๊ฐ๋์์ง๋ง, ์ฐ์ ๋์์ ์ฐพ์์ผ ํ๋ ์๋๋ฅผ ํด๋ณด์๋ค. ํ ์คํธ ๊ฒฐ๊ณผ Auto Increment๋ ์ ์ผ ํฐ ๊ฐ์ ์ถ์ ํ์ฌ +1์ ํ๊ธฐ ๋๋ฌธ์ Auto Increment๊ฐ๋ณด๋ค ๋ ํฐ ๊ฐ์ผ๋ก ๊ด๋ฆฌ๋ ํ๋ค์๋ค.
๊ทธ๋์ ๋ฐ๋๋ก Auto Increment๋ฅผ ํฐ ๊ฐ์ผ๋ก ์ค์ ํ๊ณ , ETL์์ 1๋ถํฐ ์์ํ๋ ์ํ์ค๋ฅผ ๊ด๋ฆฌํ๋ฉด ๊ฐ๋ฅํ๋จ ๊ฒ์ ์๊ฒ ๋์๋ค.
4. LAST_INSERT_ID() โ
๋ ๋ง์กฑ์ค๋ฌ์ด ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์ํด MariaDB ๋ํ๋จผํธ ๋ฆฌ์คํธ๋ฅผ ์ดํด ๋ณด๋ ์ค LAST_INSERT_ID๋ผ๊ณ ์จ์๋ ๊ฒ์ ๋ณด๊ณ ์ง๊ฐ์ ์ผ๋ก '์ ์ด๊ฑฐ๋ค!' ์์ผ๋ก ์ธ์ณค๋ค.
๋งํฌ : https://mariadb.com/kb/en/last_insert_id/
๋ฌธ์์ ์๋ ๋ง์ ์ธ์ฉํ์ฌ ๊ฐ๋ตํ๊ฒ ๋ฌด์์ธ์ง ์ค๋ช ํ์๋ฉด ์๋์ ๊ฐ๋ค.
"๊ฐ์ฅ ์ต๊ทผ์ ์คํ๋ INSERT ๋ฌธ์ ๊ฒฐ๊ณผ๋ก AUTO_INCREMENT ์ด์ ์ฑ๊ณต์ ์ผ๋ก ์ฝ์ ๋ ์ฒซ ๋ฒ์งธ ์๋ ์์ฑ ๊ฐ์ ๋ฐํ"
๋ค๋ง ์ฃผ์ํ ์ ์ ์์๋ก ๋์์๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ดํด๋ณด๋ฉด,
INSERT INTO t(f) VALUES('a');
SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
INSERT INTO t(f) VALUES('b');
INSERT INTO t(f) VALUES('c');
SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 3 |
+------------------+
INSERT INTO t(f) VALUES('d'),('e');
SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 4 |
+------------------+
์์ฒ๋ผ ๋จ์ผ Insert๋ฌธ์ ์คํํ๊ณ , ID๋ฅผ ๋ฐ๊ฒ ๋๋ฉด ์ ์ ์ํ๋์ง๋ง, ๋ค์ค Insert๋ฌธ์ ์คํํ๊ฒ ๋๋ฉด ๋๋ฒ์งธ ์ดํ์ Insert ๊ฒฐ๊ณผ๊ฐ ๋ฐ์๋์ง ์๋๋ค. ๋๋ฌธ์ ์ ํํ ๊ฐ์ ์ ๋ฌ๋ฐ๊ธฐ ์ํด์ ๋จ์ผ Insert ๋ฌธ์ ํ์ฉํด์ผ ํ๋ค.
ํ๋ ๋ ๊ฑฑ์ ๋์๋ ์ ์, ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์์ Insert๋ฅผ ์คํํ ๋, ๊ณผ์ฐ ์ ํํ ๊ฐ์ ๋ฐํํด์ฃผ๋๋ ๊ฒ์ด์๋ค.
๋ต์ ์๋ mysql ๊ณต์ ๋ฌธ์์์ ์ฐพ์ ์ ์์๋ค.
๋งํฌ : https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_last-insert-id
๋ ๋ค์ ๋ฌธ์์ ๋์์๋ ๋ง์ ๋ฒ์ญํ์ฌ ์ธ์ฉํ์๋ฉด,
์์ฑ๋ ID๋ ์ฐ๊ฒฐ๋ณ๋ก ์๋ฒ์์ ์ ์ง ๊ด๋ฆฌ๋ฉ๋๋ค. ์ด๊ฒ์ ์ฃผ์ด์ง ํด๋ผ์ด์ธํธ์ ๋ํ ํจ์์ ์ํด ๋ฐํ๋ ๊ฐ์ด ํด๋น ํด๋ผ์ด์ธํธ์ ์ํด AUTO_INCREMENT ์ด์ ์ํฅ์ ๋ฏธ์น๋ ๊ฐ์ฅ ์ต๊ทผ ๋ช ๋ น๋ฌธ์ ๋ํด ์์ฑ๋ ์ฒซ ๋ฒ์งธ AUTO_INCREMENT ๊ฐ์์ ์๋ฏธํฉ๋๋ค. ์ด ๊ฐ์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒด AUTO_INCREMENT ๊ฐ์ ์์ฑํ๋๋ผ๋ ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด ๋์์ ํตํด ๊ฐ ํด๋ผ์ด์ธํธ๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ํ๋์ ๋ํ ๊ฑฑ์ ์์ด ์ ๊ธ์ด๋ ํธ๋์ญ์ ์ด ํ์ ์์ด ์์ ์ ID๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
์ฆ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ฅผ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค๋ ๊ฒ์ด๋ค. ๋ค๋ง Last_Insert_Id()๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ , ๊ฐ์ DB Connection ์ ์ฌ์ฉํ๊ณ ์์ด์ผ ํ๋ค๋ ์ ๋ง ๊ณ ๋ คํ๋ฉด ๋์๋ค.
'๐ป ๊ฐ๋ฐ > ๐พ Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ์ํธ ์์ฝ ์๋น์ค์ ์ธ๋ฑ์ค ์ค๊ณ์ ์ฑ๋ฅ ๋น๊ต (0) | 2024.11.14 |
---|---|
Oracle ์ธํ , Eclipse Oracle ์ฐ๋ ๋ฐฉ๋ฒ (0) | 2021.02.09 |