MySQL ํ๋ก์์ ์ฝ๊ฒ ์ดํดํ๊ธฐ!
์ด ์์์ MySQL์์ ํ๋ก์์ (Stored Procedure)๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๊ณผ ํ์ฉ๋ฒ์ ์น์ ํ๊ฒ ์ค๋ช
ํด์ค๋๋ค. ํ๋ก์์ ๋ ์ฌ๋ฌ SQL ๋ฌธ์ ๋ฌถ์ด ์ ์ฅํด ๋๊ณ ํ์ํ ๋ ํธ์ถํด์ ์คํํ๋ โ์ ์ฅ๋ ํ๋ก๊ทธ๋จโ์
๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ๋ณต ์์
์ ์ค์ด๊ณ , ๋คํธ์ํฌ ํธ๋ํฝ์ ์ค์ด๋ฉฐ, ๋ณด์๋ ๊ฐํํ ์ ์์ฃ .
๋ชฉ์ฐจ
1.
2.
3.
4.
5.
6.
7.
8.
ํ๋ก์์ ๊ฐ๋
๊ณผ ์ฅ์ [00:00:17]
โข
ํ๋ก์์ ๋?์ฌ๋ฌ SQL ๋ฌธ์ ํ๋๋ก ๋ฌถ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด ๋์ ํ๋ก๊ทธ๋จ์ด์์.
โข
์ ์ฐ๋์?
1.
์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ํ ๋ฒ์ ์คํ ๊ฐ๋ฅ
2.
๋ฐ๋ณต ์์
์๋ํ
3.
๋คํธ์ํฌ ํธ๋ํฝ ๊ฐ์ (ํ๋ก๊ทธ๋จ๊ณผ DB ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ํ์ ์ค์)
4.
๊ถํ ๋ถ์ฌ๋ก ๋ณด์ ๊ฐํ ๊ฐ๋ฅ
โข
์์ํ๋ก๊ทธ๋จ์์ 10๋ฒ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด์ผ ํ ์ผ์ ํ๋ก์์ ์ ์ ์ฅํด ๋์ผ๋ฉด, ํธ์ถ ํ ๋ฒ์ผ๋ก ๋!
ํ๋ก์์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ์คํ ๋ฐฉ๋ฒ [00:05:00]
โข
๋๋ฆฌ๋ฏธํฐ(Delimiter) ๋ณ๊ฒฝํ๋ก์์ ์์ ์ฌ๋ฌ ์ฟผ๋ฆฌ๊ฐ ์๊ณ , ์ฟผ๋ฆฌ๋ง๋ค ์ธ๋ฏธ์ฝ๋ก (;)์ด ์์ผ๋ ์ ์ฒด ํ๋ก์์ ๊ตฌ๋ฌธ์ ๋์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋๋ฆฌ๋ฏธํฐ๋ฅผ ๋ฐ๊ฟ์.
โข
๊ธฐ๋ณธ ๊ตฌ์กฐ
DELIMITER //
CREATE PROCEDURE ํ๋ก์์ ๋ช
(ํ๋ผ๋ฏธํฐ)
BEGIN
-- SQL ๋ฌธ๋ค
END //
DELIMITER ;
SQL
๋ณต์ฌ
โข
์คํCALL ํ๋ก์์ ๋ช
(ํ๋ผ๋ฏธํฐ);ย ๋ก ํธ์ถํด ์คํํด์.
๋ถ์๋ณ ํ๊ท ๊ธ์ฌ ์กฐํ ํ๋ก์์ ์์ [00:10:11]
โข
๋ถ์๋ณ ํ๊ท ๊ธ์ฌ๋ฅผ ๊ตฌํ๋ ์ฟผ๋ฆฌ๋ฅผ ํ๋ก์์ ๋ก ๋ง๋ค๊ณ ํธ์ถํ๋ ์์
โข
ํธ์ถ๋ง ํ๋ฉด ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์
๋ ฅํ์ง ์์๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ด์.
ํน์ ์ง์ ๊ธ์ฌ ์ด๋ ฅ ์กฐํ ํ๋ก์์ ์ ํ๋ผ๋ฏธํฐ [00:12:48]
โข
ํน์ ์ง์์ ์ฌ์๋ฒํธ๋ฅผ ์
๋ ฅ๋ฐ์ ๊ทธ ์ง์์ ๊ธ์ฌ ๋ณ๋ ๋ด์ญ์ ์กฐํํ๋ ํ๋ก์์
โข
ํ๋ผ๋ฏธํฐ๋? ํจ์๋ ํ๋ก์์ ์ ์
๋ ฅ๊ฐ์ ๋๊ฒจ์ฃผ๋ ๋ณ์
โข
์:ย IN emp_id INT๋ ์ฌ์๋ฒํธ๋ฅผ ์
๋ ฅ๋ฐ๋ ํ๋ผ๋ฏธํฐ
โข
ํธ์ถ ์ย CALL ํ๋ก์์ ๋ช
(์ฌ์๋ฒํธ);
์๋ก์ด ์ง์ ์ถ๊ฐ ํ๋ก์์ ์ ํธ๋์ญ์
์ฒ๋ฆฌ [00:20:58]
โข
์ฌ๋ฌ ํ
์ด๋ธ(์ง์์ ๋ณด, ๋ถ์์ด๋ ฅ, ๊ธ์ฌ ๋ฑ)์ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ผ ํ ๋
โข
ํธ๋์ญ์
(Transaction): ์ฌ๋ฌ ์์
์ ํ๋๋ก ๋ฌถ์ด ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํ๊ฒ ๋ณด์ฅํ๋ ๊ธฐ๋ฅ
โข
ํธ๋์ญ์
์์:ย START TRANSACTION;
โข
์์
์ค ์ค๋ฅ ๋ฐ์ ์ ์ ์ฒด ์์
์ทจ์(ROLLBACK)
โข
์ฑ๊ณต ์ ๋ณ๊ฒฝ์ฌํญ ํ์ (COMMIT)
โข
ํ๋ก์์ ๋ด์์ ํธ๋์ญ์
์ผ๋ก ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
ํ๋ผ๋ฏธํฐ ๋ชจ๋(IN, OUT, INOUT) ์ค๋ช
[00:15:32]
โข
IN: ์
๋ ฅ ์ ์ฉ, ํธ์ถํ ๋ ๊ฐ์ ๋๊ฒจ์ฃผ๊ณ ๋ด๋ถ์์ ๋ณ๊ฒฝํด๋ ํธ์ถํ ์ชฝ์ ์ํฅ ์์
โข
OUT: ์ถ๋ ฅ ์ ์ฉ, ํ๋ก์์ ๋ด๋ถ์์ ๊ฐ์ ์ค์ ํด ํธ์ถํ ์ชฝ์ผ๋ก ๋ฐํ
โข
INOUT: ์
๋ ฅ๋ ๋ฐ๊ณ ์ถ๋ ฅ๋ ํจ, ํธ์ถํ ๋ ๊ฐ ๋๊ฒจ์ฃผ๊ณ ๋ด๋ถ์์ ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ค์ ๋๋ ค์ค
โข
ํจ์์ ๋ฌ๋ฆฌ ํ๋ก์์ ๋ ๋ฐํ๊ฐ ๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ๊ฐ์ ์ฃผ๊ณ ๋ฐ์์.
์์ ํ๋ผ๋ฏธํฐ ํ์ฉ ์์ - ์ต๊ทผ ๋ฐ๋ น์ผ์์ ๊ธ์ฌ ์กฐํ [00:53:29]
โข
์ฌ์๋ฒํธ๋ฅผ ์
๋ ฅ๋ฐ์ ๊ทธ ์ฌ์์ ๊ฐ์ฅ ์ต๊ทผ ๋ถ์ ์ด๋์ผ์์ ๊ธ์ฌ๋ฅผย OUT ํ๋ผ๋ฏธํฐ๋ก ๋ฐํํ๋ ํ๋ก์์
โข
ํธ์ถ ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ,ย CALL ํ๋ก์์ ๋ช
(์ฌ์๋ฒํธ, @์ต๊ทผ์ผ์, @์ต๊ทผ๊ธ์ฌ);ย ํํ๋ก ์ฌ์ฉ
โข
๋ฐํ๋ ๋ณ์ ๊ฐ์ย SELECT @์ต๊ทผ์ผ์, @์ต๊ทผ๊ธ์ฌ;ย ๋ก ํ์ธ ๊ฐ๋ฅ
ํ๋ก์์ ์์ , ์ญ์ ๋ฐ ์ฌ์์ฑ ๋ฐฉ๋ฒ [01:13:55]
โข
ํ๋ก์์ ๋ฅผ ์์ ํ๋ ค๋ฉด ๊ธฐ์กด ํ๋ก์์ ๋ฅผ ์ญ์ (DROP) ํ ๋ค์ ์์ฑํด์ผ ํจ
โข
์ญ์ ๊ตฌ๋ฌธ:ย DROP PROCEDURE IF EXISTS ํ๋ก์์ ๋ช
;
โข
์ฌ์์ฑ ํ ํธ์ถ ๊ฐ๋ฅ
๋ง๋ฌด๋ฆฌ ์์ฝ
MySQL ํ๋ก์์ ๋ ์ฌ๋ฌ SQL ๋ฌธ์ ํ๋๋ก ๋ฌถ์ด ์ ์ฅํ๊ณ ํ์ํ ๋ ํธ์ถํด ์คํํ๋ โ์ ์ฅ๋ ํ๋ก๊ทธ๋จโ์
๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ๋ณต ์์
์ ์ค์ด๊ณ , ๋คํธ์ํฌ ๋ถ๋ด์ ์ค์ด๋ฉฐ, ๋ณด์๋ ๊ฐํํ ์ ์์ด์. ํ๋ก์์ ๋ ํ๋ผ๋ฏธํฐ(IN, OUT, INOUT)๋ฅผ ํตํด ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ๋ฉฐ, ํธ๋์ญ์
์ ํ์ฉํด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ค๋ฌด์์ ํ๋ก์์ ๋ฅผ ์ดํดํ๊ณ ํ์ฉํ๋ ๋ฅ๋ ฅ์ ๋งค์ฐ ์ค์ํ๋, ์์ ์์ ๋ฅผ ๋ฐ๋ผ ์ง์ ๋ง๋ค์ด ๋ณด๋ฉฐ ์ตํ๋ณด์ธ์!
๊ถ๊ธํ ์ ์์ผ๋ฉด ์ธ์ ๋ ์ง ๋๊ธ๋ก ๋ฌผ์ด๋ด ์ฃผ์ธ์~ ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๋์ธ์! 