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๊ฐ์ ์ง์ ํ ๋นํด์ค ์ ์์ผ๋ ๋ง์ด๋ค.
'๐ป Programming > ์นํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Eclipse + SpringBoot + JSP ๊ฐ๋ฐํ๊ฒฝ ์ธํ ํ๊ธฐ #1 (3) | 2020.07.22 |
---|---|
[MySQL] ๋ฐ๋ชฌํ๋ก์ธ์ค๊ฐ ์๊พธ ์๋์ผ๋ก ์คํ๋์ (0) | 2020.07.05 |
TypeHandler๋ฅผ ์ด์ฉํ ๊ฐ์ฒด ๋ฆฌ์คํธ๋ฅผ text(varchar)๋ก ์ ์ฅํ๊ธฐ (1) | 2020.07.02 |
[AWS] Beanstalk IP ์ฃผ์ ์กฐํ (0) | 2020.04.03 |
[HTML ๊ธฐ๋ณธ] HTMLํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๋งํฌ/import/includeํ๊ธฐ (0) | 2019.07.10 |