λͺ©μ°¨
νΈλμμ μ΄λ?
νΈλμμ μ°μ°
νΈλμμ μν
νΈλμμ μ νΉμ§(ACID)
SAVEPOINT
νΈλμμ (Transaction)μ΄λ?
DBλ νν νΈλμμ λ¨μλ‘ μ²λ¦¬λλ€κ³ νλ€. νΈλμμ μ νλμ μμ μ μννκΈ° μν λ Όλ¦¬μ μΈ μμ μ λ¨μμ΄λ€. μ£Όμν κ²μ νΈλμμ μ μ§μμ΄(SELECT, INSERT, UPDATE, DELTE)μ λ¨μκ° μλλΌλ μ μ΄λ€. μλ₯Ό λ€μ΄, μ¬μ©μκ° κ²μνμ κΈμ μ°κ³ (INSERT), κ·Έ νμ ν΄λΉ κΈμ λ€μ μ‘°ν(SELECT)νλ νλμ μμ μ΄ μλ€κ³ κ°μ νμ. νΈλμμ μ μμ μ λ¨μμ΄λ―λ‘ μ°λ νμμ μ‘°ν νμλ₯Ό λͺ¨λ ν¬ν¨ν κ²μ΄ λλ€.
νΈλμμ λ¨μλ‘ λ¬Άμ¬μ§ μ°μ°μ μ λΆ μ€νλλμ§, μ무κ²λ μ€νλμ§ μμμΌ νλ€. μ΄κ²μ΄ λ°λ‘ DBμμ λ§νλ 'All or Nothing'μ μλ―Έμ΄λ€.
νΈλμμ μ°μ°
- Commit μ°μ°
νΈλμμ μ λν μμ μ΄ μ±κ³΅μ μΌλ‘ λλ¬μμ μ리λ μ°μ°
- Rollback μ°μ°
νΈλμμ μ²λ¦¬κ° λΉμ μμ μΌλ‘ μ’ λ£λμ΄, νΈλμμ μ μΌλΆκ° μ μμ μΌλ‘ μ²λ¦¬λμλλΌλ νΈλμμ μ μμμ±μ ꡬννκΈ° μνμ¬ λͺ¨λ μ°μ°μ μ·¨μ(Undo)νλ μ°μ°. Rollbackμ, ν΄λΉ νΈλμμ μ μ¬μμνκ±°λ νκΈ°νλ€.
νΈλμμ μν
- νλ : νΈλμμ μ΄ μ€ν μ€.
- μ€ν¨ : νΈλμμ μ€νμ μ€λ₯κ° λ°μνμ¬ μ€λ¨λμ΄μ§ μν.
- μ² ν : νΈλμμ μ΄ λΉμ μμ μΌλ‘ μ’ λ£λμ΄ Rollbackμ°μ° μνν μν.
- λΆλΆμλ£ : νΈλμμ μ λ§μ§λ§ μ°μ°κΉμ§ μ€νλμμ§λ§, Commit μ°μ° μ€ν μ μ μν.
- μλ£ : νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μ’ λ£λμ΄, Commit μ°μ°μ΄ μνλμ΄μ§ μν.
νΈλμμ νΉμ§(ACID)
νΈλμμ μ μμμ±, μΌκ΄μ±, ... μ€λ¬΄ μ μλ λ¬κ΅¬λ¦μ‘κΈ° κ°μλ κ°λ λ€μ΄ μ΄μ μΌ μ‘°κΈ λͺ νν΄μ§λ€.
1. Atomicity(μμμ±)
All or Nothing. νΈλμμ μ λͺ¨λ μ±κ³΅νλμ§, μλλ©΄ μ무κ²λ μ€νλμ§ μμμΌνλ€.
μμμ²λΌ μμ μ΄ νλμ λ©μ΄λ¦¬λ₯Ό μ΄λ£¨κ³ μλ€κ³ μκ°νλ©΄ λλ€. μλ₯Ό λ€μ΄, λ΄κ° μΉκ΅¬μκ² λμ 10,000μ μ‘κΈνλ€κ³ νμ. λ΄κ° κΈμ‘μ μ‘κΈνλ©΄μ κ³μ’μμ 10,000μμ΄ μ°¨κ°λκ³ , μΉκ΅¬λ λμ λ°μμΌλ‘μ¨ κ³μ’μμ 10,000μμ΄ μ¦μ‘λμ΄μΌνλ€. λ μ€ νλλ§ μ²λ¦¬λλ€λ©΄ μμμ±μ μλ°°ν κ²μ΄λ€.
2. Consistency(μΌκ΄μ±)
νΈλμμ μ μννκ³ λ λ€μλ κΈ°μ‘΄ λ°μ΄ν° λ² μ΄μ€μ μ μ½ μ‘°κ±΄μ΄λ λλ©μΈμ μ ν¨λ²μλ₯Ό μλ°°νμ§ μλ λ±, 'λ°μ΄ν° λ² μ΄μ€μ μ μμ μΈ μνλ₯Ό μ μ§'ν΄μΌνλ€. λ§μ½ μ΄λ€ ν μ΄λΈμ 컬λΌμ λ¬΄κ²°μ± μ μ½μ‘°κ±΄μ΄ κ±Έλ €μλλ°, μ΄λ₯Ό 무μνκ³ νΈλμμ μ΄ μνλ μ μλ€.
3. Isolation(κ³ λ¦½μ±)
νλμ νΈλμμ μ΄ μννκ³ μλ λμμλ, λ€λ₯Έ νΈλμμ μ μ κ·Όν μ μλ€. νΈλμμ 4κ°κ° κ±°μ λμμ μνλλλΌλ κ·Έ μμμμ μμλ λΆλͺ νμ¬μΌνλ€. λ€λ₯Έ νΈλμμ μ΄ μνμ€μΌλμλ lockμ΄ κ±Έλ¦¬λ©° μ€κ°κ²°κ³Όλ₯Ό μ κ·Όν μ μμΌλ©°, λκΈ°μ€μ΄μ΄μΌ νλ€.
4. Durabilty(μμ/μ§μμ±)
Commit μ°μ° λμ΄μ§ νΈλμμ μ λ°μ΄ν°λ² μ΄μ€μ μꡬμ μΌλ‘ 보쑴λλ€.
νΈλμμ μ κ³ λ¦½μ±, μ¦ κ²©λ¦¬μ±μ λν΄ μ’ λ μμΈν μμ보μ
νΈλμμ μ κ³ λ¦½μ±μ΄λ, νλμ νΈλμμ μ΄ μννλ λμ λ€λ₯Έ νΈλμμ μ΄ μ κ·Όν μ μλ€λ κ²μ΄λ€.
λμμ±μ λμ΄κΈ° μνμ¬ νΈλμμ μ λ³λ ¬μ²λ¦¬νλ©΄ λ°μ΄ν°μ 무결μ±μ΄ κΉ¨μ§ μ μμΌλ, κ³ λ¦½μ±μ 보μ₯νκΈ° μνμ¬ νΈλμμ μ μμ°¨μ μΌλ‘ μ€ννλ€λ©΄ λμμ± μ²λ¦¬ μ΄μκ° λ°μν μ μλ€.
μ΄μ κ΄λ ¨ν λ¬Έμ μ μ ν¬κ² 3κ°μ§λ‘ λΆλ₯λ μ μλ€.
Dirty Read
λ€λ₯Έ νΈλμμ μ μν΄ μμ λμ§λ§ μμ§ μ»€λ°λμ§ μμ λ°μ΄ν°λ₯Ό μ½λ κ².
μ) AνΈλμμ μ΄ λ°μ΄ν°μ μ κ·Όνμ¬ ν΄λΉ κ°μ 1μμ 2λ‘ λ³κ²½νμλ€. κ·Έλ¦¬κ³ μμ§ Commitμ νμ§ μμλ€. μ΄ λ, BνΈλμμ μ΄ ν΄λΉ λ°μ΄ν°λ₯Ό μ½μΌλ©΄ λλ²μ§Έ νΈλμμ μ΄ μ½μ κ°μγ ‘Commitμ νμ§ μμμμλγ ‘2κ° λλ€. BνΈλμμ μ 2λ₯Ό κ°μ§κ³ λ³ΈμΈμ λ‘μ§μ μ²λ¦¬νλ€. λ°μ΄ν°κ° κΌ¬μΌ κ².
Non-Repeatable Read
ν νΈλμμ λ΄μμ κ°μ keyλ₯Ό κ°μ§ Rowλ₯Ό λ λ² μ½μλλ°, κ·Έ μ¬μ΄μ κ°μ΄ λ³κ²½λκ±°λ μμ λ λμ λ¬Έμ .
μ) AνΈλμμ μ΄ λ°μ΄ν°λ₯Ό μ½κ³ μλ€. μ΄λ, BνΈλμμ μ΄ λ°μ΄ν°μ μ κ·Όνμ¬ ν΄λΉ κ°μ λ³κ²½/μμ ν λ€ Commitνλ€. μ΄λ AνΈλμμ μ΄ λ€μ ν΄λΉ λ°μ΄ν°λ₯Ό μ½μΌλ©΄, Bκ° λ³κ²½/μμ ν λ°μ΄ν°λ₯Ό μ°Ύκ² λλ€.
Phantom Read
ν νΈλμμ λ΄μμ κ°μ 쿼리λ₯Ό λ λ² μννλλ°, 첫 λ²μ§Έ 쿼리μμ μλ μ λ Ή λ μ½λκ° λ λ²μ§Έ 쿼리μμ λνλ¨.
Non-Repeatable Readκ³Ό ν·κ°λ¦΄ μ μλ€. Non~μ 1κ°μ Rowλ°μ΄ν° κ°μ΄ λ³κ²½λλ κ²μ΄κ³ , Phantonμ λ€ κ±΄μ μμ²νλ κ²μ λν΄ λ°μ΄ν° κ°μ΄ λ³κ²½λλ κ²μ΄λ€.
μ) AνΈλμμ μ€, 첫 λ²μ§Έ 쿼리μμ νΉμ 쑰건μΌλ‘ λ°μ΄ν°λ₯Ό κ²μνμ¬ κ²°κ³Όλ₯Ό μ»μ΄λλ€. μ΄ λ, BνΈλμμ μ΄ μ κ·Όνμ¬ ν΄λΉ 쑰건μ λ°μ΄ν° μΌλΆλ₯Ό μμ /μΆκ°νμλ AνΈλμμ μ΄ λλ²μ§Έ 쿼리λ₯Ό μ‘°ννλ©΄ BνΈλμμ μ΄ μμ /μΆκ°ν λ°μ΄ν°κ° ν¨κ» μ‘°ν/λλ½λλ€.
SAVE POINTλ?
λ³΄ν΅ Rollbackμ νλ©΄, INSERT UPDATE, DELETE λ± μμ μ μ²΄κ° μ·¨μλλ€. κ·Έλ°λ° μ΄λ, μ μ²΄κ° μλ νΉμ λΆλΆμμ νΈλμμ μ μ·¨μμν¬ μ μλ€. μ¦, SAVEPOINTλ₯Ό μ°λ©΄ νλμ 컀λ€λ νΈλμμ μ μκ² λΆλ¦¬ν μ μλ€. SAVEPOINTλ μ¬λ¬κ°μ SQLλ¬Έμ μννλ κ²½μ°, μ¬μ©μκ° νΈλμμ μ€κ° λ¨κ³μμ SAVEPOINTλ₯Ό μ§μ ν μ μλ€.
1)
SQL 1 μν
COMMIT
2)
SQL 2 μν
SAVEPOINT 1 μ€μ
3)
SQL 3 μν
SAVEPOINT 2 μ€μ
4)
SQL 4 μν
SQL1;
COMMIT;
SQL2;
SAVEPOINT 1;
SQL3;
SAVEPOINT 2;
SQL4;
ROLLBACK TO 2; --SQL4 μν μ μΌλ‘ λμκ°λ€.
ROLLBACK TO 1; --SQL3 μν μ μΌλ‘ λμκ°λ€.
ROLLBACK; --SQL2 μν μ μΌλ‘ λμκ°λ€. μ΅μ’
μ μΌλ‘ SQL1λ§ COMMIT μ°μ° λ μν.
'π Database' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Database] λ°μ΄ν° λ² μ΄μ€ Lockμ κ°λ , μμ± λ° ν΄μ μ리 (0) | 2022.02.26 |
---|---|
[DBκΈ°μ΄] DBMSλ? (0) | 2021.10.22 |