๐ปํ๋ก์์ (์คํ ์ด๋ ํ๋ก๊ทธ๋จ)
ํ๋ก์์ ๋ ์ผ๋ จ์ ์ฟผ๋ฆฌ๋ฅผ ํ๋์ ํจ์์ฒ๋ผ ์คํํ๊ธฐ ์ํ ์ฟผ๋ฆฌ์ ์งํฉ์ด๋ค. ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐ์ ์ ์๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ BLOCK์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฐ์ ์คํ ๋๋ ๊ตฌํ์ด ๋ณต์กํ ํธ๋์ญ์ ์ ์ํํ๋ PL/SQL BLOCK์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ธฐ ์ํด ์์ฑํ๋ค.
๐ปํ๋ก์์ (์คํ ์ด๋ ํ๋ก๊ทธ๋จ)๋ฅผ ์ฌ์ฉํ๋ ์ด์
๐๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด์์ ํฅ์
MYSQL์ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ ์์ฒด์ ์ธ ๋ณด์ ์ค์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ ๋จ์๋ก ์คํ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค. ์ด๋ฌํ ๋ณด์ ๊ธฐ๋ฅ์ ์กฐํฉํด์ ํน์ ํ ์ด๋ธ์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋๋ ํน์ ์นผ๋ผ์ ๋ํด์๋ง ๊ถํ์ ์ค์ ํ๋ ๋ฑ ์ธ๋ฐํ ๊ถํ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์์ฑํ๋ค๋ฉด SQL ์ธ์ ์ ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ์ฌ๊ณ ๋ ํผํ ์ ์์ ๊ฒ์ด๋ค.
๐๊ธฐ๋ฅ์ ์ถ์ํ
์ผ๋ จ๋ฒํธ์ ๊ฐ์ ๋ณต์กํ ๋ฐฉ์์ผ๋ก ์์ฑ๋๋ ๊ฒฝ์ฐ ์์ฑ ๋ฐฉ์์ด ๋ณต์กํ์ฌ , MYSQL์ Auto_increment๋ฅผ ์ด์ฉํ ์๊ฐ ์๋ค. ๋ง์ฝ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ผ๋ จ๋ฒํธ ์์ฑ์ฉ ๋ชจ๋์ ๊ฐ๋ฐํ๋ค๋ฉด ๊ฐ๋ฐํ๋ ์ธ์ด๋ณ๋ก ํธํ๋์ง ์์๋ฟ๋๋ฌ ์ง์ SQL ํด๋ผ์ด์ธํธ์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ผ๋ จ๋ฒํธ ์์ฑ์ฉ ํ๋ก๊ทธ๋จ์ MYSQL ์๋ฒ์ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ SQL ํด๋ผ์ด์ธํธ์์๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๐์ ์ฐจ์ ๊ธฐ๋ฅ ๊ตฌํ
DBMS ์๋ฒ์์ ์ฌ์ฉํ๋ SQL์ฟผ๋ฆฌ๋ ์ ์ฐจ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค. ์ฆ, SQL ์ฟผ๋ฆฌ์์๋ IF๋ WHILE๊ณผ ๊ฐ์ ์ ์ด ๋ฌธ์ฅ์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ DBMS ์๋ฒ์์ ์ ์ฐจ์ ์ธ ๊ธฐ๋ฅ์ ์คํํ ์ ์๋ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๊ฐ๋ SQL ๋ฌธ์ฅ์ผ๋ก ์ ๋ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ค์ด ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฐ ์ํฉ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ๊ณตํ ํ ๋ค์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ํํ๋ก ๊ฐ๋ฐ์ ์งํ์ ํ์ง๋ง ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ ์ด์ฉํด ์ ์ฐจ์ ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๋ฉด ์ต์ํ ๋คํธ์ํฌ ๊ฒฝ์ ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋งํผ์ ์ค์ผ ์ ์๊ณ ๋ถํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.
๐๊ฐ๋ฐ ์ ๋ฌด์ ๊ตฌ๋ถ
์์ํ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ์กฐ์ง๊ณผ DBMS ๊ด๋ จ ์ฝ๋๋ฅผ ๊ฐ๋ฐํ๋ ์กฐ์ง์ด ๋ณ๋๋ก ๊ตฌ๋ถ๋์ด ์๋ค๋ฉด DBMS์ฝ๋๋ฅผ ๊ฐ๋ฐํ๋ ์กฐ์ง์์๋ ํธ๋์ญ์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด API์ฒ๋ผ ๋ง๋ค์ด ์ ๊ณตํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ ํธ์ถํด์ ์ฌ์ฉํ๋ ํํ๋ก ์ญํ ์ ๊ตฌ๋ถํด์ ๊ฐ๋ฐ์ ์งํํ ์๋ ์๋ค.
๐๋คํธ์ํฌ ์์์๊ฐ ์ ๊ฐ
์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ ๊ฐ์ ๋คํธ์ํฌ ๊ตฌ๊ฐ์ ์กด์ฌํ๋ฏ๋ก SQL์ ์คํ ์ฑ๋ฅ์์ ๋คํธ์ํฌ๋ฅผ ๊ฒฝ์ ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ง์ ์ ๊ฒฝ์ ์ฐ์ง ์๋๋ค. ๊ทธ๋ฌ๋ ํ๋ํ๋ ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋ ์ ์๋ค๋ฉด ๋คํธ์ํฌ๋ฅผ ๊ฒฝ์ ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์์ ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค. ํ๋์ ํ๋ก๊ทธ๋จ์์ 100๋ฒ, 200๋ฒ์ฉ ์คํํด์ผ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํํ๋ค๋ฉด ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ ํธ์ถํ ๋ ํ ๋ฒ๋ง ๋คํธ์ํฌ๋ฅผ ๊ฒฝ์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ์์ ์๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
๐ปํ๋ก์์ (์คํ ์ด๋ ํ๋ก๊ทธ๋จ)์ ๋จ์
๐จ๋ฎ์ ์ฒ๋ฆฌ ์ฑ๋ฅ
์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ MYSQL ์์ง์์ ํด์๋๊ณ ์คํ๋๋ค. ํ์ง๋ง MYSQL ์๋ฒ๋ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์ ์ ์ฐจ์ ์ฝ๋ ์ฒ๋ฆฌ์ ์ค์ ์ ๋๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ ์ธ์ด์ ๋นํด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.

๐จ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์กฐ๊ฐํ
์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์น๋ ๋ฐฐํฌ ์์ ์ด ๊ฐ์๋ก ๋ณต์กํด์ง๋ค. ๊ฐ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ ์๋ฐ์ MYSQL์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ถ์ฐ๋๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์น๋ ๋ฐฐํฌ๊ฐ ๋ณต์กํด ์์ง๊ณ ์ ์ง๋ณด์ ๋ํ ์ด๋ ค์์ง ์ ์๋ค.
๐ปํ๋ก์์ (์คํ ์ด๋ ํ๋ก๊ทธ๋จ)์ ์ฌ์ฉ ์์
1. ํ๋ก์์ ์์ฑ
- DEFINER : ์ ๊ทผ ๊ถํ
- PROCEDURE : ํ๋ก์์ ์ด๋ฆ
- ๋งค๊ฐ๋ณ์ + ํ์
- SET ๋ณ์ ์ค์
- ๊ธฐํธ๊ฐ ์์ ๋ ํ๋ก์์ ์คํ์ด ๋๋๋ฉด ์ด๊ธฐํ
- @๊ฐ ์์ผ๋ฉด ํ๋ก์์ ๊ฐ ๋๋๋ ๊ณ์ ์ ์ง
- CONCAT() : ๋ฌธ์์ด ํฉ์น๊ธฐ
- PREPARE : ์คํ ์ค๋น
- EXECUTE : PREPARE ๋ ๊ฒ์ ์คํ
โํ๋ก์์ ๊ธฐ๋ณธ ํํ
CREATE DEFINER=`DB๊ถํ์ด ์๋ ์์ด๋`@`%` PROCEDURE `ํ๋ก์์ ์ด๋ฆ`
BEGIN
SELECT *
FROM ํ
์ด๋ธ๋ช
END
DB์ ์ ์ํ๋ ID๋ช ์ ์ ์ด์ค๋ค. ์ฌ๊ธฐ์ ์ ๋ ID๋ ๋ฌด์กฐ๊ฑด ๊ถํ์ด ์๋ ID๋ฅผ ๋ฃ์ด์ผ ํ๋ค.
โํ๋ก์์ ์ธ์ ๊ฐ ๋ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ๋
CREATE DEFINER=`DB๊ถํ์ด ์๋ ์์ด๋`@`%` PROCEDURE `ํ๋ก์์ ์ด๋ฆ`(
IN ๋ณ์๋ช
์๋ฃํ
OUT ๋ณ์๋ช
์๋ฃํ
)
BEGIN
SELECT *
FROM ํ
์ด๋ธ๋ช
WHERE ์ปฌ๋ผ๋ช
= ๋ณ์๋ช
END
๋ฐ์ ๋ณ์๋ช ๊ณผ ์๋ฃํ (INT, VARCHAR(40) ๋ฑ)์ ์ ๋ ฅํด์ค๋ค. ๋ฐ์ ๋๋ IN์ ์ฌ์ฉํ๊ณ ๋ฐํํ๋ ๋ณ์์ ์๋ฃํ์ OUT
โํ๋ก์์ ๋ณ์ ํ ๋น
CREATE DEFINER=`DB๊ถํ์ด ์๋ ์์ด๋`@`%` PROCEDURE `ํ๋ก์์ ์ด๋ฆ`(
IN ๋ณ์๋ช
์๋ฃํ
)
BEGIN
SET @v_code = '123';
SELECT *
FROM ํ
์ด๋ธ๋ช
WHERE ์ปฌ๋ผ = ๋ณ์๋ช
AND
์ปฌ๋ผ = @v_code
EN
๋ณ์๋ฅผ ํ ๋นํ ๋ ๋ฐ๋ก ๊ฐ์ ์ ์ด๋ ๋์ง๋ง ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ (@v_code = (select,,,,from...))ํ ๋นํ ์ ์๋ค.
โํ๋ก์์ ์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ๊ธฐ IF, ELSEIF, OR, AND..
CREATE DEFINER=`DB์์ด๋`@`%` PROCEDURE `ํ๋ก์์ ๋ช
`(
IN ๋ณ์๋ช
์๋ฃํ
)
BEGIN
SET @v_code = '123';
IF @v_code!='' THEN
SELECT *
FROM ํ
์ด๋ธ๋ช
WHERE ์ปฌ๋ผ = ๋ณ์๋ช
AND
์ปฌ๋ผ = @v_code
END IF;
END
IF ์กฐ๊ฑด๋ฌธ OR ์กฐ๊ฑด๋ฌธ THEN
์คํ ๋ฌธ๊ตฌ
ELSE IF ์กฐ๊ฑด๋ฌธ THEN
์คํ ๋ฌธ๊ตฌ
END IF;
๋ฑ์ ํํ๋ก ์ธ ์ ์์ผ๋ฉฐ
NULL ์ฒดํฌ๋ IS NOT NULL / IS NULL์ ์ธ ์ ์๋ค.
โํ๋ก์์ ์์ฑ ์์
CREATE DEFINER='root'@'%' PROCEDURE test_prc(id int(10))
BEGIN
SET @t1 = CONCAT('SELECT * FROM test_', id);
PREPARE s FROM @t1;
EXECUTE s;
END
์ด๋ฐ ์์ ํ๋ก์์ ๋ ํ ์ด๋ธ ์ด๋ฆ์ ๋ฐฐ์ด ๋ณ์์ ๋ด์์ LOOPING ๋๋ ค ํ๋ฒ์ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
โ
REFERENCE
https://unlimitedcoding.tistory.com/15
https://velog.io/@ym1085/MySQL-%ED%94%84% EB% A1% 9C% EC% 8B% 9C% EC% A0%80% EB% 9E%80
'Dev > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| MYSQL B-tree Index(์ธ๋ฑ์ค) (0) | 2024.12.03 |
|---|---|
| Mysql Architecture - Mysql Engine์ ๋ํด (0) | 2024.10.22 |
| [MYBATIS] choose ์ ์ ์ด์ฉํ DynamicSQL (0) | 2022.03.03 |
| [MYSQL] MYSQL Partition - ํ ์ด๋ธ ๋ถํ (0) | 2022.02.24 |
| [mybatis] Association๊ณผ Collection (0) | 2022.02.22 |