CS

SQL - DB νŠΈλžœμž­μ…˜(Transaction)

sun_young 2024. 11. 13. 22:57
πŸ”Ž νŠΈλžœμž­μ…˜μ΄λž€?
λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” μž‘μ—… λ‹¨μœ„

 

μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚¨λ‹€ = SQL μ§ˆμ˜μ–΄λ₯Ό 톡해 DB에 μ ‘κ·Όν•˜λŠ”κ²ƒ (SELECT, INSERT, DELETE, UPDATE)

 

μ‰½κ²Œ 말해 ν•œκΊΌλ²ˆμ— μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  연산을 λͺ¨μ•„놓은 κ²ƒμœΌλ‘œ, 연산듀을 λͺ¨λ‘ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•œ κ²½μš°μ—λŠ” 원 μƒνƒœλ‘œ λ³΅κ΅¬ν•œλ‹€.

μž‘μ—…μ˜ μΌλΆ€λ§Œ μ μš©λ˜λŠ” ν˜„μƒμ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€!

→ μž‘μ—…μ˜ 완전성을 보μž₯ν•΄μ€€λ‹€.

 

μ‚¬μš©μž Aκ°€ μ‚¬μš©μž Bμ—κ²Œ λ§Œμ›μ„ μ†‘κΈˆν•œλ‹€.

1. μ‚¬μš©μž A의 κ³„μ’Œμ—μ„œ λ§Œμ›μ„ μ°¨κ°ν•œλ‹€.
2. μ‚¬μš©μž B의 κ³„μ’Œμ—μ„œ λ§Œμ›μ„ μΆ”κ°€ν•œλ‹€.

좜금 UPDATEλ¬Έ + μž…κΈˆ UPDATEλ¬Έ
이λ₯Ό 톡틀어 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄λΌκ³  ν•œλ‹€.
μœ„ 두 쿼리문 λͺ¨λ‘ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ–΄μ•Όλ§Œ ν•˜λ‚˜μ˜ μž‘μ—…, νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ˜λŠ” 것이닀. = commit
μž‘μ—… λ‹¨μœ„μ— μ†ν•˜λŠ” 쿼리 쀑 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ λͺ¨λ“  쿼리문을 μ·¨μ†Œν•˜κ³  이전 μƒνƒœλ‘œ λŒμ•„κ°„λ‹€. = rollback

 

νŠΈλžœμž­μ…˜ νŠΉμ§•

  1. μ›μžμ„±
    νŠΈλžœμž­μ…˜μ΄ db에 λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜ ν˜Ήμ€ μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
  2. 일관성
    νŠΈλžœμž­μ…˜μ˜ μž‘μ—… 처리 κ²°κ³ΌλŠ” 항상 일관성 μžˆμ–΄μ•Ό ν•œλ‹€.
  3. 독립성
    λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰λ˜κ³  μžˆμ„ λ•Œ μ–΄λ–€ νŠΈλžœμž­μ…˜λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜ 연산에 끼어듀 수 μ—†λ‹€.
  4. 지속성
    νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμœΌλ©΄, κ²°κ³ΌλŠ” 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•œλ‹€.

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

  1. commit
    νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰λ˜μ—ˆμŒμ„ μ„ μ–Έν•˜λŠ” μ—°μ‚°μœΌλ‘œ, COMMIT **** μ—°μ‚°μ˜ 싀행을 톡해 νŠΈλžœμž­μ…˜μ˜ μˆ˜ν–‰μ΄ μ™„λ£Œλ˜μ—ˆμŒμ„ μ„ μ–Έν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό μ΅œμ’… db에 λ°˜μ˜ν•œλ‹€.
  2. rollback
    νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ΄ μ‹€νŒ¨ν–ˆμŒμ„ μ„ μ–Έν•˜κ³  μž‘μ—…μ„ μ·¨μ†Œν•˜λŠ” μ—°μ‚°μœΌλ‘œ, νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰λ˜λŠ” 도쀑 일뢀 연산이 μ²˜λ¦¬λ˜μ§€ λͺ»ν•œ 상황이라면 rollback 연산을 μ‹€ν–‰ν•˜μ—¬ νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ΄ μ‹€νŒ¨ν–ˆμŒμ„ μ„ μ–Έν•˜κ³  μˆ˜ν–‰ μ „κ³Ό μΌκ΄€λœ μƒνƒœλ‘œ λ˜λŒλ €μ•Ό  ν•œλ‹€.

νŠΈλžœμž­μ…˜ μƒνƒœ

좜처 : https://velog.io/@shasha/Database-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EB%A6%AC

 

  • Active
    νŠΈλžœμž­μ…˜ ν™œλ™ μƒνƒœ, νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰ 쀑이며 λ™μž‘ 쀑인 μƒνƒœλ₯Ό λ§ν•œλ‹€.
  • Partially Committed
    νŠΈλžœμž­μ…˜μ˜ 컀밋 λͺ…령이 λ„μ°©ν•œ μƒνƒœ
    νŠΈλžœμž­μ…˜μ˜ commit 이전 sql문이 μˆ˜ν–‰λ˜κ³ , commit만 남은 μƒνƒœλ₯Ό λ§ν•œλ‹€.
  • Failed
    νŠΈλžœμž­μ…˜ μ‹€νŒ¨ μƒνƒœ, νŠΈλžœμž­μ…˜μ΄ μ •μƒμ μœΌλ‘œ 진행될 수 μ—†λŠ” μƒνƒœλ₯Ό λ§ν•œλ‹€.
  • Commited
    νŠΈλžœμž­μ…˜ μ™„λ£Œ μƒνƒœ, νŠΈλžœμž­μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ™„λ£Œλœ μƒνƒœλ₯Ό λ§ν•œλ‹€.
  • Aborted
    νŠΈλžœμž­μ…˜ μ·¨μ†Œ μƒνƒœ, νŠΈλžœμž­μ…˜μ΄ μ·¨μ†Œλ˜κ³  μ‹€ν–‰ 이전 λ°μ΄ν„°λ‘œ λŒμ•„κ°„ μƒνƒœλ₯Ό λ§ν•œλ‹€.

 

νŠΈλžœμž­μ…˜ 관리λ₯Ό μœ„ν•œ DBMS의 μ „λž΅

  • UNDO
    Buffer κ΅μ²΄λŠ” transactionκ³ΌλŠ” λ¬΄κ΄€ν•˜κ²Œ buffer의 μƒνƒœμ— λ”°λΌμ„œ κ²°μ •λœλ‹€. 이둜 인해 μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ§€ μ•Šμ€ transaction이 λ³€κ²½ν•œ page듀은 원상 볡ꡬ λ˜μ–΄μ•Ό ν•˜λŠ”λ° 이λ₯Ό undo라고 ν•œλ‹€. (μ‚¬μš©μžμ˜ μž‘μ—…μ„ μ›μƒνƒœλ‘œ λŒλ¦°λ‹€)
  • REDO
    이미 μ»€λ°‹ν•œ νŠΈλžœμž­μ…˜μ˜ μˆ˜μ •μ„ μž¬λ°˜μ˜ν•˜λŠ” 볡ꡬ μž‘μ—… (볡ꡬ할 λ•Œ μ‚¬μš©μžκ°€ ν–ˆλ˜ μž‘μ—…μ„ κ·ΈλŒ€λ‘œ λ‹€μ‹œ)

 

 

'CS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

κ΅μ°©μƒνƒœ  (0) 2024.11.16
μ¨λ“œ νŒŒν‹°(3rd party)λž€?  (0) 2024.11.14
SQL - μ €μž₯ ν”„λ‘œμ‹œμ €(Stored Procedure)  (2) 2024.11.12
B Tree & B+ Tree  (0) 2024.11.11
SQL - 인덱슀(Index)  (3) 2024.11.10