UPDATE / DELETE

๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” UPDATE / DELETE ์ฟผ๋ฆฌ๋Š” ์ฃผ๋กœ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ํ•œ ๊ฑด(ํ˜น์€ ์†Œ๋Ÿ‰) ๋ ˆ์ฝ”๋“œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ MySQL ์„œ๋ฒ„์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ํ•œ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋Œ€์ƒ์œผ๋กœ UPDATE / DELETE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

UPDATE(DELETE) ... ORDER BY ... LIMIT n

WHERE ์กฐ๊ฑด์ ˆ์— ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ง€๋งŒ, ORDER BY + LIMIT ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•ด ์ƒ์œ„ n๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ๊ฑด์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜์„ ๋„ˆ๋ฌด ์˜ค๋ž˜ ์œ ์ง€ํ•˜๊ฒŒ ๋˜์–ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, LIMIT์œผ๋กœ ์กฐ๊ธˆ์”ฉ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ์‚ฌ์šฉํ•œ๋‹ค.

JOIN UPDATE

๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ์กฐ์ธ๋œ ๊ฒฐ๊ณผ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ UPDATE / DELETE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์ฃผ๋กœ ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

  1. ์กฐ์ธ๋œ ํ…Œ์ด๋ธ” ์ค‘์—์„œ ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ๊ฐ’์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ

  2. ์–‘์ชฝ ํ…Œ์ด๋ธ”์— ๊ณตํ†ต์œผ๋กœ ์กด์žฌํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ์ฐพ์•„์„œ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ

SELECT ์ฟผ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JOIN ์ˆœ์„œ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•ด์„œ ์ ์ ˆํ•œ JOIN ์ˆœ์„œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ์กฐ์ธ๋˜๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์ฝ๊ธฐ ์ฐธ์กฐ๋งŒ ๋˜๋Š” ํ…Œ์ด๋ธ”์€ ์ฝ๊ธฐ ์ž ๊ธˆ์ด ๊ฑธ๋ฆฌ๊ณ , ์ปฌ๋Ÿผ์ด ๋ณ€๊ฒฝ๋˜๋Š” ํ…Œ์ด๋ธ”์€ ์“ฐ๊ธฐ ์ž ๊ธˆ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์›น ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„  ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์—ฌ๋Ÿฌ ๋ ˆ์ฝ”๋“œ UPDATE

์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ๋ ˆ์ฝ”๋“œ ๊ฐ’์œผ๋กœ๋งŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, 8.0 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ(Row Constructor)์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

UPDATE user_level ul
    INNER JOIN (VALUES ROW (1, 1), ROW (2, 4)) new_user_level (user_id, user_lv)
    ON new_user_level.user_id = ul.user_id
SET ul.user_lv = ul.user_lv + new_user_level.user_lv;

VALUES ROW(...), ROW(...), ... ๋ฌธ๋ฒ•์€ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ”์— ์กฐ์ธํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

JOIN DELETE

๊ธฐ๋ณธ์ ์œผ๋กœ JOIN DELETE ๋ฌธ์žฅ์€ ์ผ๋ฐ˜์ ์ธ ๋‹จ์ผ ํ…Œ์ด๋ธ” DELETE ๋ฌธ์žฅ๊ณผ ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

-- 3๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•œ ๋’ค employees, dept_emp ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์‚ญ์ œ
DELETE e, de -- ์‚ญ์ œํ•  ํ…Œ์ด๋ธ”์„ ์ง€์ •
FROM employees e,
     dept_emp de,
     departments d
WHERE e.emp_no = de.emp_no
  AND de.dept_no = d.dept_no
  AND d.dept_no = 'd59';

SELECT ์ฟผ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JOIN ์ˆœ์„œ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•ด์„œ ์ ์ ˆํ•œ JOIN ์ˆœ์„œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

Last updated