์๋ก
MySQL์์ UPDATE ๋ฌธ๊ตฌ๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๋๋ง UPDATE๋ฅผ ์ํํฉ๋๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ฎ์ด ์์ฐ๊ธฐ ๊ธฐ๋ฅ ์ฆ, ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ UPDATE๋ฅผ ์ํํ๊ณ , ์กด์ฌํ์ง ์๋ค๋ฉด INSERT๋ฅผ ์ํํ๋ ๊ธฐ๋ฅ์ด ํ์ํ์ต๋๋ค. ์ฌ์ค ๋น์ฆ๋์ค ๋ก์ง์์ ๊ฒ์ฆ ํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ถ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค๋ ๋์ง๋ง ํน์๋ ์ํ๋ ๊ธฐ๋ฅ์ด ์์๊น ์ถ์ด์ ์ฐพ์๋ณด๊ฒ ๋์์ต๋๋ค.
MySQL UPSERT
UPSERT๋ ์ด๋ฆ์์๋ ๋ณด์ด๋ฏ์ด UPDATE์ INSERT๋ฅผ ํฉ์น ๋จ์ด์ ๋๋ค. MySQL์์๋ ์ด๋ฌํ UPSERT ๊ธฐ๋ฅ์ 4.1 ์ด์ ๋ฒ์ ๋ถํฐ ์ง์ํฉ๋๋ค.
์ฆ, UPSERT๋ ์ค๋ณต๋๋ ๊ฐ(UNIQUE KEY)์ด ์๋ค๋ฉด UPDATE๋ฅผ ์ํํ๊ณ , ์ค๋ณต๋๋ ๊ฐ์ด ์๋ค๋ฉด INSERT๋ฅผ ์ํํฉ๋๋ค. UPSERT๋ ON DUPLICATE KEY UPDATE๋ฅผ INSERT๋ฌธ๊ตฌ ๋ค์ ๋ถ์์ผ๋ก์จ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
ON DUPLICATE KEY UPDATE๋ ๋ฐ์ดํฐ ์ฝ์ ์ UNIQUE KEY๊ฐ ์์ผ๋ฉด(์ค๋ณต๋๋ฉด) ์ง์ ํ ๊ฐ์ ์ ๋ฐ์ดํธ(๋ฎ์ด์ฐ๊ธฐ) ํ๊ณ , ์๋ค๋ฉด INSERT๋ฅผ ์ํํ๋ ๋ฌธ๋ฒ์ ๋๋ค.
INSERT INTO ํ
์ด๋ธ๋ช
(userId, name, age)
VALUES
(1, '์์ฃผํ', 25)
ON DUPLICATE KEY UPDATE
name = '์์ฃผํ',
age = 19;
์ ์์ ์ฝ๋์์์ UNIQUE KEY๋ userId๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ฝ๋์ ์ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํด๋น ํ ์ด๋ธ์ userId 1์ด ์๋ค๋ฉด (1, '์์ฃผํ', 25)๋ฅผ insert ํฉ๋๋ค.
- ๋ง์ฝ userId 1์ด ์กด์ฌํ๋ค๋ฉด {name = '์์ฃผํ', age = 19}๋ก update ํฉ๋๋ค.
๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ค๋ฅธ DB์์์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋์ ํ์ ๊ฐ์ต๋๋ค.
DataBase | Query |
MySQL | ON DUPLICATE KEY UPDATE |
Oracle | MERGE INTO |
MSSQL | IN NOT EXISTS |
'BackEnd๐ฑ > DB & SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL์์ VARCHAR์ TEXT์ ์ฐจ์ด (1) | 2023.09.17 |
---|---|
Redis์ ๋ฐ์ดํฐ ํ์ , ๋ช ๋ น์ด์ ํ์ฉ ์ฌ๋ก (0) | 2023.09.05 |
์ค๋ฌด์์ Redisson์ ์ฐ๊ฒฐํ๋ฉด์ ๊ฒช์ ๋ฌธ์ ์ ๋ค (2) | 2023.08.18 |
Docker ์ปจํ ์ด๋์ MariaDB ์ค์นํ๊ธฐ (4) | 2023.05.12 |
์ธ๋ฑ์ค๋ฅผ ์ํ๋ ์ฟผ๋ฆฌ๋ค (0) | 2023.03.23 |
[MySQL] SELECT ๋ฌธ์์ NULL ๊ฐ ์นํํ๊ธฐ (0) | 2022.05.12 |
๋๊ธ