๐Ÿ”‘ON DUPLICATE KEY

0

DB ๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
5/5

ON DUPLICATE KEY UPDATE์—์„œ ํ‚ค๊ฐ€ email์ธ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ?**

ON DUPLICATE KEY UPDATE๋Š” "๊ณ ์œ (UNIQUE) ํ‚ค๋‚˜ ๊ธฐ๋ณธ ํ‚ค(PRIMARY KEY) ์ถฉ๋Œ ์‹œ ์ˆ˜ํ–‰ํ•  ๋™์ž‘"์„ ์ •์˜ํ•˜๋Š” MySQL/MariaDB์˜ SQL ๊ตฌ๋ฌธ์ด๋‹ค.

ํ•ด๋‹น ํ‚ค๊ฐ€ ์ถฉ๋Œ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋Š” ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ์— ์žˆ๋‹ค.


๐Ÿ“ 1. ํ…Œ์ด๋ธ” ์ •์˜์—์„œ ๋‹จ์„œ ์ฐพ๊ธฐ

์•„๋ž˜์˜ ๊ฐ„๋‹จํ•œ user ํ…Œ์ด๋ธ”์„ ์ฐธ๊ณ ํ•ด๋ณด์ž.

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

๐Ÿ“Œ ์ฃผ๋ชฉํ•  ๋ถ€๋ถ„

  1. PRIMARY KEY (id)
    • ๊ฐ ํ–‰์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•œ๋‹ค.
  2. UNIQUE (email)
    • email ํ•„๋“œ๊ฐ€ UNIQUE๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

๐Ÿ› ๏ธ 2. ON DUPLICATE KEY UPDATE์˜ ์ž‘๋™ ๋ฐฉ์‹

  • MariaDB/MySQL์˜ ๊ทœ์น™:
    • ON DUPLICATE KEY UPDATE๋Š” PRIMARY KEY๋‚˜ UNIQUE KEY๊ฐ€ ์ถฉ๋Œํ•  ๋•Œ ์‹คํ–‰๋œ๋‹ค.
    • ์ด ๊ฒฝ์šฐ, id๋‚˜ email์ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ์™€ ์ถฉ๋Œํ•  ๊ฒฝ์šฐ, UPDATE ์ ˆ์ด ์‹คํ–‰๋œ๋‹ค.
  • ์ด ์˜ˆ์‹œ์—์„œ๋Š” email์ด UNIQUE๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ:
    • INSERT๋ฅผ ์‹œ๋„ํ•  ๋•Œ email ๊ฐ’์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ON DUPLICATE KEY UPDATE ์ ˆ์ด ์‹คํ–‰๋œ๋‹ค.

๐Ÿ“Š 3. ํ•ต์‹ฌ ์ •๋ฆฌ

  1. email ํ•„๋“œ๊ฐ€ UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  2. ON DUPLICATE KEY UPDATE๋Š” PRIMARY KEY ๋˜๋Š” UNIQUE KEY ์ค‘ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
  3. ์œ„ ํ…Œ์ด๋ธ”์—์„œ๋Š” email์ด UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— email ์ถฉ๋Œ ์‹œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€