
MySQL INSERT INTO...ON DUPLICATE KEY UPDATE... ๐
mysql์๋ Oracle์ merge into์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์๋ค๋ ๊ฑธ ์๊ฒ๋์ด ๋ฏธ๋์ ๋ด๊ฐ ๋ณด๊ธฐ์ํด ๊ธฐ๋กํจ
ํ ์คํธ๋ฅผ ์ํด ํ ์ด๋ธ ํ๋ ์์ฑ
CREATE TABLE `test_220714` (
`id` bigint(20) NOT NULL,
`name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ 2๊ฐ ์ ๋ ์ ๋ ฅ
INSERT INTO test_220714(id, name)VALUES(1, 'ironMan');
INSERT INTO test_220714(id, name)VALUES(2, 'thor');

DBeaver์ ๊ฐ์ ํด์ ์ฌ์ฉํ๋ฉด SQL์ ์์ฑํด์ฃผ๋๊น ์ด๋ฅผ ์ด์ฉํ๋ฉด ํธํ๋ค.

์ด ์ํ์์ ๊ฐ์ด ์ด๋ฏธ ์์ผ๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ํ๊ณ ์์ผ๋ฉด insert๋ฅผ ํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด SQL์ ์์ฑํด์ ์คํํด๋ณด๊ฒ ๋ค.
INSERT INTO test_220714(id, name)
VALUES('1', 'odin')
ON DUPLICATE KEY UPDATE
name = 'odin'
;
๊ทธ๋ฌ๋ฉด ์๋์ฒ๋ผ id๊ฐ 1๋ฒ์ธ ๋ฐ์ดํฐ์ name์ด odin์ผ๋ก ๋ณ๊ฒฝ๋๊ฑธ ํ์ธ ํ ์ ์๋ค.

์๋์ฒ๋ผ SQL์ ์คํํ๋ฉด 3๋ฒ ์งธ ํญ๋ชฉ์ด ์ถ๊ฐ๊ฐ ๋๋ค.
INSERT INTO test_220714
(id, name)
VALUES('3', 'xman')
ON DUPLICATE KEY UPDATE
name = 'xman'
;

INSERT INTO... ๋ค์ ๋ถ์ ON DUPLICATE KEY UPDATE ์ด ๊ตฌ๋ฌธ์ด ์ด ์ญํ ์ ํด์ค๋ค.
DUPLICATE KEY, ์ฆ ์ค๋ณตํค(pk๋ฅผ ๋ปํจ)๊ฐ ์์ผ๋ฉด ์ ๋ฐ์ดํธ ๋ฌธ์ ์คํํ๊ฒ ๋ค๋ ์๋ฆฌ๋ค.
-- ๊ทธ๋์ ์ด ๊ฒฝ์ฐ๋ id๊ฐ 1๋ฒ์ธ ๋ฐ์ดํฐ๋ ์ด๋ฏธ ์์ผ๋ name์ด 'ironMan'์์ 'odin'์ผ๋ก ๋ณ๊ฒฝ๋์๋ค.
INSERT INTO test_220714(id, name)
VALUES('1', 'odin')
ON DUPLICATE KEY UPDATE
name = 'odin'
;
-- ์ด ๊ฒฝ์ฐ๋ id๊ฐ 3๋ฒ์ธ ๋ฐ์ดํฐ๋ ์กด์ฌํ์ง ์์ผ๋ 'xman'์ด insert ๋์๋ค.
INSERT INTO test_220714
(id, name)
VALUES('3', 'xman')
ON DUPLICATE KEY UPDATE
name = 'xman'
;
๋ง์ผ ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ด์ฉํ์ง ์๊ณ ๋ฑ๋ก/์์ ์ ๋ถ๊ธฐ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๋ก์ง์ ์ํํด์ผ ํ๋ค.
- ํค๊ฐ์ ํด๋น๋๋ ๋ฐ์ดํฐ์ ์กด์ฌ์ ๋ฌด ์ฒดํฌ SQL ์คํ
- ํด๋น SQL์ ๊ฐ์ด ์์ผ๋ฉด INSERT๋ฌธ, ์์ผ๋ฉด UPDATE๋ฌธ ์คํ
๋ถ ํ์ํ ์กด์ฌ์ ๋ฌด ์ฒดํฌํ๋ SQL์ ํ๋ฒ ๋ ์คํํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์, ๋นํจ์จ์ ์ธ ์ธก๋ฉด์ด ์๊ธด๋ค.
์ฌ์ฉํ๋ DBMS์ ๋ฒ์ ์ด ํด๋น ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋ ๋ฒ์ ์ด๊ฑฐ๋ ๊ทธ ์ธ ์ํฉ์ด ์๋๋ฉด DUPLICATE KEY UPDATE...๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
mybatis์์๋ ์๋์ฒ๋ผ ์ฌ์ฉํ๋ฉด ๋๋ค.
<insert id="insertMember" parameterType="MemberVO">
INSERT INTO member
(
id,
name,
email,
regDate
)
VALUES
(
#{id},
#{name},
#{email},
now()
)
ON DUPLICATE KEY UPDATE
name = #{name},
email = #{email},
updateDate = NOW()
</insert>

๊ฐ์ธ ์คํฐ๋ ๊ธฐ๋ก์ ๋ฉ๋ชจํ๋ ๊ณต๊ฐ์ด๋ผ ํ๋ฆฐ์ ์ด ์์ ์ ์์ต๋๋ค.
ํ๋ฆฐ ์ ์์ ๊ฒฝ์ฐ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
'IT > DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Cubrid]์์คํ ์นดํ๋ก๊ทธ(ํ ์ด๋ธ, ์ปฌ๋ผ ์กฐํ) (0) | 2022.11.22 |
|---|---|
| [MySQL/MariaDB] Column 'xx' in where clause is ambiguous ์๋ฌ (0) | 2022.11.22 |
| [MySQL/MariaDB] GROUP_CONCAT() ๊ฐ๋จ ์ฌ์ฉ๋ฒ(feat. ๋ฌธ์์ด ๋ถ์ด๊ธฐ) (0) | 2022.11.22 |
| [Oracle]GROUP BY + ๊ทธ๋ฃนํจ์(SUM, COUNT ๋ฑ) (0) | 2022.11.19 |
| [Oracle] ORA-12547 TNS lost contact/UDE-12547 error.. (0) | 2022.11.19 |
๋๊ธ