MySQL์˜ auto_increment ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ์ 

์‚ฌ๋‚ด์—์„œ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ์œ„ํ•ด์„œ ํ…Œ์ด๋ธ” ๋งŒ๋“ค ๋•Œ auto increment ์ปฌ๋Ÿผ์„ pk๋กœ ์ถ”๊ฐ€ํ•ด๋‹ฌ๋ผ๋Š” ์š”์ฒญ์ด ์žˆ์–ด์„œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ์‹œ ๊ผญ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ auto increment ์ปฌ๋Ÿผ์˜ ๊ฐ’์€ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ(insert)๋  ๋•Œ๋งŒ ์˜ฌ๋ผ๊ฐˆ ๊ฑฐ๋ผ๊ณ  ์ง€๋ ˆ์ง์ž‘๋งŒ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์— ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ๋นจ๋ฆฌ ๊ฐœ๋ฐœํ•ด์ค˜์•ผํ•ด์„œ ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธํ•˜๋‹ค๊ฐ€ auto increment๊ฐ’์ด ์ˆœ์„œ๋Œ€๋กœ ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋Š” ํ˜„์ƒ์„ ๋ณด๊ฒŒ๋˜์—ˆ๋‹ค.

ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” insert -> select -> update -> select ์ˆœ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ๊ณ  ๋™์ผํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ตœ์†Œ ๋‘ ๋ฒˆ ์ด์ƒ ๋Œ๋ ธ๋‹ค. ์ด๋ ‡๊ฒŒ ๋Œ๋ฆฌ๋‹ˆ๊นŒ ์ฒ˜์Œ์—๋Š” ๋‹น์—ฐํžˆ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์–ด์„œ no๊ฐ’์€ default๋กœ 1๋กœ ์ƒ์„ฑ์ด ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋˜‘๊ฐ™์€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋‹ค์‹œ ๋Œ๋ฆฌ๋ฉด duplicate key exception์ด ๋ฐœ์ƒํ•˜๋ฉด์„œ ๋‚ด๋ถ€์ ์œผ๋กœ auto increment๊ฐ’์ด ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์„ ์ค„ ์•Œ์•˜์œผ๋‚˜, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ๋ชปํ•œ๋‹คํ•ด๋„ insert๊ฐ€ ์‹œ๋„๋  ๋•Œ๋งˆ๋‹ค no๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. auto increment๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” ์ผ€์ด์Šค๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. insert๊ฐ€ ์‹œ๋„๋˜๋ฉด no๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.

2. duplication key ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹คํ•ด๋„ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.

3. update์‹œ์—๋Š” ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์•˜๋‹ค.

์ผ๋ถ€ ํ…Œ์ด๋ธ”์€ ๋งŽ์€ ์–‘์˜ insert on duplicate key update ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ ์žˆ๋Š”๋ฐ auto increment๊ฐ’์ด overflow ๋˜์ง€ ์•Š์„๊นŒ ์—ผ๋ ค๋˜์–ด ํ˜„์žฌ max no๊ฐ’์„ ์กฐํšŒํ•ด๋ณด๋‹ˆ ์•„์ง ์ˆ˜ ๋…„์€ ๋ฒ„ํ‹ธ ์ˆ˜๋Š” ์žˆ์„ ์ •๋„์˜€๋‹ค.

๋งŒ์•ฝ overflow ๋ ์ •๋„๋กœ ๋งŽ์ด ์˜ฌ๋ผ๊ฐ„๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ ??? no ๊ฐ’์„ ๋‹ค์‹œ 1๋กœ ์„ธํŒ…ํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๊ธฐ๋Š” ํ•˜๋‹ค. ์•„๋ž˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋‹ค์‹œ 1๋ถ€ํ„ฐ ์„ธํŒ…์„ ํ•ด์ค€๋‹ค.

ALTER TABLE YOUR_TABLE_NAME AUTO_INCREMENT=1;
SET @COUNT = 0;
UPDATE YOUR_TABLE_NAME SET AUTO_INCREMENT_COLUMN_NAME = @COUNT:=@COUNT+1;

ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ lock์ด ์žกํž ๊ฒƒ์ด๋ผ์„œ ์ ๊ฒ€๋•Œ์—๋‚˜ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ด ๋ฐฉ๋ฒ• ๋ง๊ณ  ์ง์ ‘ no๋ฅผ ์„ธํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ์— no๊ฐ’์„ ์ง์ ‘ ํ• ๋‹นํ•ด์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ง์ด๋‹ค.