MySQL ์ต๊ทผ์ ์ถ๊ฐ๋ ๊ฐ ์ธ๋ฑ์ค ์ฐพ๊ธฐ LAST_INSERT_ID() ํจ์ ํ์ฉ
๐จ๐ป ์ต๊ทผ์ ์ถ๊ฐ๋ ๊ฐ์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ, LAST_INSERT_ID() ํจ์ ํ์ฉ
โ Problem
๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ๊ฐ ํํ๋ค์ ๊ตฌ๋ถํ ์ ์๊ฒ ์ ์ฅํ๊ธฐ ์ํด ํ ์ด๋ธ์ ์ค๊ณํ ๋
ํ ์ด๋ธ์ PK๋ฅผ Auto_Increment๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋ง์ต๋๋ค.
์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํตํด Reviews๋ผ๋ ํ ์ด๋ธ์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฑ๋กํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
INSERT INTO Reviews(hospitalIdx, userIdx, review, reviewScore) VALUES (?,?,?,?);
์ด ์ํฉ์์ ํน์ ์ฌ์ฉ์๊ฐ ๋ฑ๋กํ ๋ฆฌ๋ทฐ๋ฅผ ์์ ํ๊ธฐ ์ํด์๋ Reviewsํ ์ด๋ธ์์
์ฌ์ฉ์๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ๋ช ๋ฒ์งธ ํํ์ธ์ง ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ทฐ ํ ์ด๋ธ์ PK๋ฅผ ์์์ผ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ฆฌ๋ทฐ ํ ์ด๋ธ์ PK๋ฅผ ์ฐพ์ผ๋ฉด ๋ ๊น์?
SELECT reviewIdx
FROM Reviews
WHERE hospitalIdx = ? AND userIdx = ? AND review = ? AND reviewScore = ?
๋ฌผ๋ก ์ด๋ฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ฐพ์ ์ ์๊ฒ ์ง๋ง ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์๋กญ๊ฒ ๋ ์ง์ผํ๊ธฐ์ ๋นํจ์จ์ ์ด๊ณ
์ฌ์ฉ์๊ฐ ๋๊ฐ์ ๋ณ์์ ๋๊ฐ์ ๋ฆฌ๋ทฐ์ ๋๊ฐ์ ์ ์๋ฅผ ์์ฑํ๋ค๊ณ ํ๋ฉด ๋ ์ด์๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๐ Solution
๊ทธ๋์ ์ด๋ฐ ๊ฒฝ์ฐ์ LAST_INSERT_ID() ํ์ฉํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ํ ์ด๋ธ์ ๋ง์ง๋ง์ ์ ๋ ฅ๋ Auto_Increment ๊ฐ์ ๋ฆฌํดํ๊ฒ ๋ฉ๋๋ค.
์ฆ ์ด ๊ฒฝ์ฐ์์ ๋ง์ง๋ง์ ์์ฑ๋ reviewIdx๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ํ์ธํ ์ ์๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ก ํ์ธํด ๋ด ์๋ค.
์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํตํด "์ต๊ณ "๋ผ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฑ๋กํ์ต๋๋ค.
์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 10์ด๋ผ๋ PK๊ฐ์ ๊ฐ์ง๋ฉฐ reviewIdx์ปฌ๋ผ์ ์ ์ฅ๋์๋ค์.
INSERT INTO Reviews(hospitalIdx, userIdx, review, reviewScore) VALUES (1,1,"์ต๊ณ ",3.7);
์๋์ ๊ฐ์ด LAST_INSERT_ID() ํจ์๋ฅผ ํตํด ๋ง์ง๋ง์ ์ ๋ ฅ๋ Auto_Increment ๋ฆฌํดํ๊ณ ์์์ ํ์ธํ ์ ์์ต๋๋ค.
SELECT LAST_INSERT_ID() AS reviewIdx;