μ μ€λ μμ μ μ΄λμ κ²μλ§ ν΄λ΄€μ§, μ€μ λ‘λ μ²μ 곡λΆν΄λ³΄λ λΆλΆμ΄μλ€. μ λ§ SQLμλ λ§μ κΈ°λ₯μ΄ μκ³ λλ κΈ°λ³Έμ μΈ κ²λ€λ§ κ²¨μ° μ¬μ©νκ³ μμꡬλ... λ°°μΈμλ‘ μ κΈ°νκ³ μ¬λ°λ κ² λ§μ κ² κ°λ€. μ λΆλ₯Ό μ μ ν μ 리νμ§ λͺ»νκ² μ§λ§ λ΄κ° 보기μ μ€μν κ²λ€ μμ£Όλ‘ ν λ² μ 리λ₯Ό ν΄λ΄€λ€!
λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό μ²λ¦¬νκ³ μ‘°μνλ λ° μ¬μ©λλ 미리 μ μλ ν¨μ
β λ΄μ₯ν¨μλ₯Ό νΈμΆνλ©΄ MySQL μμ§μ΄ μμμ ν΄μ€
νΉμ±
λ¬Έμμ΄ ν¨μ, μν ν¨μ, λ μ§/μκ° ν¨μ, μ§κ³ ν¨μ, λ³ν ν¨μ λ±μ΄ μλ€.
Stored Procedure, MySQLμμ 미리 μμ±λ SQL 쿼리μ μ§ν©
μ¬λ¬ SQL λ¬Έμ νλμ 루ν΄μΌλ‘ κ²°ν©νμ¬, λ°λ³΅μ μΈ μμ μ μ½κ² μ²λ¦¬νκ³ μ½λ μ¬μ¬μ©μ±μ λμ΄λλ° μ μ©ν¨
νΈμΆλλ©΄ μ¦μ μ€ν, 볡μ‘ν μμ μ μλννλλ° μμ£Ό μ¬μ©
κ΅¬μ± λ΄μ
Client: μ¬μ©μκ° μ μ₯ νλ‘μμ λ₯Ό νΈμΆνλ νκ²½ (ex. μΉ μ ν리μΌμ΄μ , CLI λ±)
MySQL μλ²: μ μ₯ νλ‘μμ κ° μ€νλλ
DBMS.μ μ₯ νλ‘μμ : 미리 μ μλ SQL μμ λΈλ‘
λ°μ΄ν°λ² μ΄μ€: μ μ₯ νλ‘μμ κ° μνΈμμ©λ λ°μ΄ν° μ μ₯μ
Client β MySQL μλ² β μ μ₯ νλ‘μμ β λ°μ΄ν°λ² μ΄μ€
μ μ₯ νλ‘μμ μ νΉμ§
ν€μλ ꡬλΆ
DELIMITER //
//
λ‘ λ³κ²½ β νλ‘μμ λ΄μμ μ¬μ©λ ;
ꡬ문과 νΌλλμ§ μλλ‘ μ€μ CREATE PROCEDURE
IN
IN
ν€μλλ₯Ό μ¬μ©ν΄μ 맀κ°λ³μλ₯Ό μ μνκ³ , λ°μ΄ν° νμ
μ μ μνλ€. BEGIN ... END
END //
DELIITER ;
;
λ‘ λλ리λ λͺ
λ Ή μ μ₯ νλ‘μμ νΈμΆ/μμ
CALL
/ DROP PROCEDURE IF EXISTS
IF EXISTS
ꡬ문μ ν΅ν΄μ ν΄λΉ νλ‘μμ κ° μ‘΄μ¬νμ§ μμ λ λ°μν μ μλ μ€λ₯λ₯Ό λ°©μ§νλ€ μ μ₯ νλ‘μμ μ μ© λΆμΌ
λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμμ λ°μ΄ν°κ° μ½μ , κ°±μ λλ μμ λ λ μλμΌλ‘ μ€νλλ SQL μ½λ λΈλ‘
λ°μ΄ν° λ¬΄κ²°μ± μ μ§, μ΄λ²€νΈ κΈ°λ°μ μλνλ μμ μν
λ°μ΄ν°κ° λ³λλ λ νΉμ κ·μΉμ κ°μ νκ±°λ μΆκ° μμ μ μννλλ° μ¬μ©
νΈλ¦¬κ±° μ€ν μμ
BEFORE
: λ°μ΄ν° μμ
μ
AFTER
: λ°μ΄ν° μμ
ν
νΈλ¦¬κ±° μ ν
μ£Όμ κΈ°λ₯ λ° νΉμ§
νΈλ¦¬κ±° μμ± β μ΄λ²€νΈ λ°μ(INSERT/UPDATE/DELETE) β BEFORE / AFTER νΈλ¦¬κ±° μ€ν β SQL μ€ν (λ°μ΄ν° μ²λ¦¬, λ‘κ·Έ κΈ°λ‘ λ±)
CREATE TRIGGER νΈλ¦¬κ±°_μ΄λ¦
[BEFORE|AFTER] [INSERT|UPDATE|DELETE]
ON ν
μ΄λΈ_μ΄λ¦
FOR EACH ROW
BEGIN
-- λ°μ΄ν° λμ μ μ
END;
νλμ μμ λ¨μλ‘, μ¬λ¬ SQL 쿼리λ€μ΄ ν λ²μ μ€νλμ΄μΌ ν λ μ¬μ©
β λ°μ΄ν° 무결μ±μ μ μ§νκΈ° μν¨
ACID μ€μ
κΈ°λ₯
COMMIT
- νΈλμμ
μμ λ°μν λͺ¨λ λ³κ²½ μ¬νμ μꡬμ μΌλ‘ μ μ₯
ROLLBACK
- μꡬμ μΌλ‘ μ·¨μ
SAVEPOINT
- νΈλμμ
λ΄μμ νΉμ μμ μΌλ‘ λμκ°κΈ° μν΄ μ€μ
ISOLATION LEVEL
- νΈλμμ
κ°μ μνΈμμ© μ λ μ μ΄
START TRANSACTION
βCOMMIT
|ROLLBACK
μ£Όμμ¬ν
User-Defined Function, MySQLμμ μ¬μ©μκ° μ§μ μ μν ν¨μ
λ΄μ₯ ν¨μκ° μ 곡νμ§ μλ νΉμ μμ μ μνν΄μΌ ν λ μ¬μ©μκ° μ§μ SQL μ½λλ₯Ό μμ±νμ¬ ν¨μλ‘ λ±λ‘ν μ μλ€! β μ½λ μ¬μ¬μ© κ°λ₯, 볡μ‘ν 쿼리 λ Όλ¦¬λ₯Ό ν¨μλ‘ μΊ‘μνν μ μλ€
CREATE FUNCTION ν¨μ_μ΄λ¦ (μ
λ ₯κ° λ°μ΄ν°νμ
, ...)
RETURNS κ²°κ³Όκ°λ°μ΄ν°νμ
BEGIN
DECLARE μμκ° λ°μ΄ν°νμ
;
SET μμκ° = μ
λ ₯κ°;
-- ν¨μ λ΄μ©
RETURN κ²°κ³Όκ°;
END;
-- ν¨μ μμ
DROP FUNCTION ν¨μ_μ΄λ¦;
νΉμ§
νλ‘κ·Έλλ° μΈμ΄λ§νΌμ μλμ§λ§, sqlμμλ μΈμκ°μ λ°κ³ , 리ν΄νλ μμ ννμ΄ λλ€λ!!!! μ¬κΈ°λ κΉκ² 곡λΆν΄λ΄€λ μ μ΄ μλ λΆμΌλΌμ μ²μ μμκ³ μ κΈ°νλ€. νμ νλ©΄μ 'μ 쿼리μμλ λ°λ‘ μ΄λ»κ² μ λλ?' κΆκΈνκΈ°λ§ νμ§ μ°Ύμλ³Ό μκ°μ μνμμ γ γ νμ§λ§ μꡬλ... μ΄λ―Έ μμꡬλ... λ΄κ° μκ°ν κ² = μ΄λ―Έ μ²μ¬λ€μ΄ μκ°νκ³ ν΄κ²°μ± κΉμ§ λ΄λμ γ γ
μνΌ νΈλ¦¬κ±°λ μ¬μ©μ μ μ ν¨μλ μμλλ©΄ μ λ§μ λ§ νΈνκ² μΈ κ² κ°λ€λ μκ°μ νλ€. μ μ₯ νλ‘μμ λ μ μΈ μ€ μμμΌκ² λ€. 맀μ°λ§€μ°λ§€μ° λ§μ΄ μ¬μ©νλ λ¬Έλ²μ λ°°μ΄ κ² κ°μ λλ~ μ¬λ°μλ€.
λ³Έ ν¬μ€ν μ κΈλ‘λ²μννΈμ¨μ΄μΊ νΌμ€μ κ΅λ³΄DTSκ° ν¨κ» μ§ννλ μ±λ¦°μ§μ λλ€