[Database] Transactionκ³Ό Trigger

2021. 10. 13. 16:36γ†λ°μ΄ν„°λ² μ΄μŠ€

728x90

 

 

1. Transaction 

νŠΈλžœμž­μ…˜μ΄λž€ λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž‘μ—…μ˜ λ‹¨μœ„ λ˜λŠ” 

ν•œκΊΌλ²ˆμ— μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  일련의 연산듀을 μ˜λ―Έν•œλ‹€. 

νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ 병행 μ œμ–΄ 및 회볡 μž‘μ—… μ‹œ μ²˜λ¦¬λ˜λŠ” μž‘μ—…μ˜ 논리적 λ‹¨μœ„μ΄λ‹€. 

 

2. Transaction νŠΉμ§• 

 

1️⃣ μ›μžμ„± Automicity 

νŠΈλžœμž­μ…˜μ˜ 연산은 λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜ ν˜Ήμ€ μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. 

 

2️⃣ 일관성 Consistency

νŠΈλžœμž­μ…˜μ΄ 싀행을 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•˜λ©΄ μ–Έμ œλ‚˜ 일관성 μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ‘œ λ³€ν™˜ν•œλ‹€. 

νŠΈλžœμž­μ…˜μ˜ μž‘μ—… 처리 κ²°κ³Όκ°€ 항상 일관성 μžˆμ–΄μ•Ό ν•œλ‹€. 

 

3️⃣ 독립성, 격리성 (Isolation)

λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰λ˜λŠ” 경우 μ–΄λŠ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ 싀행쀑에 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 연산이 끼어듀 수 μ—†λ‹€. 

 

4️⃣ μ˜μ†μ„± (Durability)

μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ νŠΈλžœμž­μ…˜μ˜ κ²°κ³ΌλŠ” μ‹œμŠ€ν…œμ΄ κ³ μž₯λ‚˜λ”λΌλ„ 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•œλ‹€.

 

 

3. νŠΈλžœμž­μ…˜ μ—°μ‚° 

1️⃣ Commit : commit 연산은 ν•œκ°œμ˜ 논리적 λ‹¨μœ„(νŠΈλžœμž­μ…˜)에 λŒ€ν•œ μž‘μ—…μ΄ μ„±κ³΅μ μœΌλ‘œ 끝났고, λ°μ΄ν„°λ² μ΄μŠ€κ°€ λ‹€μ‹œ μΌκ΄€λœ μƒνƒœμ— μžˆμ„ λ•Œ, 이 νŠΈλžœμž­μ…˜μ΄ ν–‰ν•œ κ°±μ‹  연산이 μ™„λ£Œλœ 것을 νŠΈλžœμž­μ…˜ κ΄€λ¦¬μžμ—κ²Œ μ•Œλ €μ£ΌλŠ” 연산이닀. 

 

2️⃣ Rollback : rollback 연산은 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성을 κΉ¨λœ¨λ Έμ„ λ•Œ

이 νŠΈλžœμž­μ…˜μ˜ 일뢀가 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλ”λΌλ„ νŠΈλžœμž­μ…˜μ˜ μ›μžμ„±μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 이 νŠΈλžœμž­μ…˜μ΄ ν–‰ν•œ λͺ¨λ“  연산을 μ·¨μ†Œ(undo) ν•˜λŠ” 연산이닀. 

 

 

4. Transaction μƒνƒœ 

ν™œλ™ Activce : νŠΈλžœμž­μ…˜μ΄ 싀행쀑인 μƒνƒœ

λΆ€λΆ„ μ™„λ£Œ Partially Commited : νŠΈλžœμž­μ…˜μ΄ λ§ˆμ§€λ§‰ μ—°μ‚°κΉŒμ§€ μ‹€ν–‰ν–ˆμ§€λ§Œ, Commit 연산이 μ‹€ν–‰ 되기 μ§μ „μ˜ μƒνƒœ

μ™„λ£Œ Commited : νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ Commit 연산을 μ‹€ν–‰ν•œ ν›„μ˜ μƒνƒœ 

μ‹€νŒ¨ Failed : νŠΈλžœμž­μ…˜ 싀행에 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μ€‘λ‹¨λœ μƒνƒœ 

철회 Aborted : νŠΈλžœμž­μ…˜μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ Rollback 연산을 μˆ˜ν–‰ν•œ μƒνƒœ 

 

 

5. Trigger 

νŠΈλ¦¬κ±°λŠ” νŠΉμ • ν…Œμ΄λΈ”μ— DML 문이 μˆ˜ν–‰λ˜μ—ˆμ„ λ•Œ, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μžλ™μœΌλ‘œ λ™μž‘ν•˜λ„λ‘ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ΄λ‹€.

νŠΈλ¦¬κ±°λŠ” μ‚¬μš©μžκ°€ 직접 ν˜ΈμΆœν•˜λŠ” ν˜•νƒœκ°€ μ•„λ‹ˆλΌ, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μžλ™μ μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” 것이 νŠΉμ§•μ΄λ‹€. 

 

 

6. Trigger μ’…λ₯˜ 

ν–‰ 트리거 : 데이터 λ³€ν™”κ°€ 생길 λ•Œ λ§ˆλ‹€ μ‹€ν–‰ν•œλ‹€. 

λ¬Έμž₯ 트리거 : νŠΈλ¦¬κ±°μ— μ˜ν•΄ 단 ν•œλ²ˆ μ‹€ν–‰ν•œλ‹€. 

 

 

 

7. Trigger ꡬ성 

μ„ μ–ΈλΆ€ DECLARE : 트리거의 λͺ…칭이 μ •μ˜λ˜λŠ” λΆ€λΆ„ 

 

μ΄λ²€νŠΈλΆ€ EVENT : νŠΈλ¦¬κ±°κ°€ μ‹€ν–‰λ˜λŠ” 타이밍,이벀트λ₯Ό λͺ…μ‹œν•˜λŠ” λΆ€λΆ„ 

 

μ‹œμž‘/μ’…λ£ŒλΆ€ (BEGIN/END) : 트리거의 μ‹œμž‘κ³Ό μ’…λ£Œλ₯Ό ν‘œν˜„ν•˜λ©°, BEGIN/ ENDκ°€ μŒμ„ 이룬닀. 

μ΄λŠ” λ‹€μˆ˜μ˜ 싀행을 μ œμ–΄ν•˜λŠ” 기본적 λ‹¨μœ„κ°€ 되고, 논리적 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬μ„±ν•œλ‹€. 

 

μ œμ–΄λΆ€ CONTROL : 기본적으둜 순차적으둜 μ²˜λ¦¬ν•œλ‹€. 

비ꡐ 쑰건에 따라 블둝 λ˜λŠ”λ¬Έμž₯을 μ‹€ν–‰ν•˜κ³ , 쑰건에따라 반볡 μ‹€ν–‰ν•œλ‹€. 

 

μ˜ˆμ™ΈλΆ€ EXCEPTION : BEGIN/ENDμ ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” SQL문이 싀행될 λ•Œ μ˜ˆμ™Έ λ°œμƒ μ‹œ μ˜ˆμ™Έ 처리 방법을 μ •μ˜ν•˜λŠ” μ²˜λ¦¬λΆ€

 

 

 

 

 

** νŠΈλ¦¬κ±°λŠ” μ£Όμ˜μ‚¬ν•­μ΄ μžˆλ‹€. 

트리거 λ‚΄μ—μ„œλŠ” COMMIT, ROLLBACK λ“±μ˜ TCL(Transaction Control Language) μ‚¬μš©μ‹œ 컴파일 μ—λŸ¬κ°€ λ‚œλ‹€. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90