Search

MySQL ํ”„๋กœ์‹œ์ €

MySQL ํ”„๋กœ์‹œ์ € ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ!

์ด ์˜์ƒ์€ MySQL์—์„œ ํ”„๋กœ์‹œ์ €(Stored Procedure)๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๊ณผ ํ™œ์šฉ๋ฒ•์„ ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ค๋‹ˆ๋‹ค. ํ”„๋กœ์‹œ์ €๋ž€ ์—ฌ๋Ÿฌ SQL ๋ฌธ์„ ๋ฌถ์–ด ์ €์žฅํ•ด ๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” โ€˜์ €์žฅ๋œ ํ”„๋กœ๊ทธ๋žจโ€™์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต ์ž‘์—…์„ ์ค„์ด๊ณ , ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ด๋ฉฐ, ๋ณด์•ˆ๋„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์ฃ .

๋ชฉ์ฐจ

1.
ํ”„๋กœ์‹œ์ € ๊ฐœ๋…๊ณผ ์žฅ์  [00:00:17]
2.
ํ”„๋กœ์‹œ์ € ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ์‹คํ–‰ ๋ฐฉ๋ฒ• [00:05:00]
3.
๋ถ€์„œ๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ ์กฐํšŒ ํ”„๋กœ์‹œ์ € ์˜ˆ์ œ [00:10:11]
4.
ํŠน์ • ์ง์› ๊ธ‰์—ฌ ์ด๋ ฅ ์กฐํšŒ ํ”„๋กœ์‹œ์ €์™€ ํŒŒ๋ผ๋ฏธํ„ฐ [00:12:48]
5.
์ƒˆ๋กœ์šด ์ง์› ์ถ”๊ฐ€ ํ”„๋กœ์‹œ์ €์™€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ [00:20:58]
6.
ํŒŒ๋ผ๋ฏธํ„ฐ ๋ชจ๋“œ(IN, OUT, INOUT) ์„ค๋ช… [00:15:32]
7.
์•„์›ƒ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™œ์šฉ ์˜ˆ์ œ - ์ตœ๊ทผ ๋ฐ˜๋ น์ผ์ž์™€ ๊ธ‰์—ฌ ์กฐํšŒ [00:53:29]
8.
ํ”„๋กœ์‹œ์ € ์ˆ˜์ •, ์‚ญ์ œ ๋ฐ ์žฌ์ƒ์„ฑ ๋ฐฉ๋ฒ• [01:13:55]

ํ”„๋กœ์‹œ์ € ๊ฐœ๋…๊ณผ ์žฅ์  [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)๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜์„ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์‹ค๋ฌด์—์„œ ํ”„๋กœ์‹œ์ €๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋Šฅ๋ ฅ์€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ˆ, ์˜์ƒ ์˜ˆ์ œ๋ฅผ ๋”ฐ๋ผ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณด๋ฉฐ ์ตํ˜€๋ณด์„ธ์š”!
๊ถ๊ธˆํ•œ ์  ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€๋กœ ๋ฌผ์–ด๋ด ์ฃผ์„ธ์š”~ ์ฆ๊ฑฐ์šด ์ฝ”๋”ฉ ๋˜์„ธ์š”!