λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Data/MariaDB

DB] νŠΈλžœμ μ…˜(TRANSACTION)

by bamDal 2022. 5. 2.

 

Transaction

database μ—μ„œ μ‚¬μš©λ˜λŠ” μͺΌκ°€ 수 μ—†λŠ” 업무 처리의 λ‹¨μœ„.

ALL or Nothing,

μž‘μ—… λ‚΄λΆ€μ˜ 과정이 ν•˜λ‚˜λΌλ„ 잘λͺ»λ˜λ©΄ λͺ¨λ‘ μ·¨μ†Œλ˜μ–΄μ•Ό ν•œλ‹€.

 

μ˜ˆμ‹œ)

5000λ§Œμ›μ„ μ†‘κΈˆν•˜λŠ” 과정은 '5000λ§Œμ›μ„ A의 κ³„μ’Œμ—μ„œ 좜금'ν•˜κ³  'B의 κ³„μ’Œμ— μž…κΈˆ'ν•˜λŠ” 2번의 κ³Όμ •μœΌλ‘œ λ‚˜λˆ μ Έμžˆλ‹€.

λ§Œμ•½ 5000λ§Œμ›μ΄ 'A의 κ³„μ’Œμ—μ„œ 좜금'ν•˜λŠ” 것 κΉŒμ§„ μ„±κ³΅ν–ˆμœΌλ‚˜ 

'B의 κ³„μ’Œμ— μž…κΈˆ'ν•˜λŠ” 것을 μ‹€νŒ¨ν•˜κ²Œ 되면 κ·Έ 5000λ§Œμ›μ€ μ–΄λ””λ‘œ κ°”λŠ”μ§€ μ•Œ 수 μ—†κ²Œ λœλ‹€.

λ”°λΌμ„œ 5000λ§Œμ›μ„ 'Aμ—κ²Œμ„œ 좜금'ν•˜λŠ” 것과 'Bμ—κ²Œ μž…κΈˆ'ν•˜λŠ” 것은 νŠΈλžœμ μ…˜μœΌλ‘œ λ¬Άμ–΄ ν•œ λ²ˆμ— μ²˜λ¦¬ν•΄μ•Ό μ•ˆμ „ν•˜λ‹€.

이 λ•Œ μ‚¬μš©λ˜λŠ” 것이 rollback κ³Ό commit μ΄λ‹€.

μž…κΈˆ μ‹€νŒ¨ ν•˜λ©΄ μΆœκΈˆκΉŒμ§€ rollback, 좜금과 μž…κΈˆ λͺ¨λ‘ 성곡 μ‹œμ— commit

 

commit κ³Ό rollback
commit; -- μ΅œμ’… ν™•μ •
rollback; -- 되돌리기

 

  • commit : ν˜„μž¬κΉŒμ§€ μ‹€ν–‰λœ λ‚΄μš”μ„ μ €μž₯ -> 되돌릴 수 μ—†λ‹€.
  • rollback : λ˜λŒλ¦¬λŠ” μž‘μ—…. -> commit μ΄ν›„μ—λŠ” ν•  수 μ—†λ‹€.
  • commit μ΄λ‚˜ rollback은 DML(update,delete,insert) μ—λ§Œ μ‚¬μš©λœλ‹€.
  • DDL(create,alter,drop)에 μ‚¬μš©ν•  수 μ—†λ‹€.

μœ„μ— DML μ—μ„œ selectκ°€ λΉ μ§€λŠ” μ΄μœ λŠ” 검색이 데이터에 영ν–₯을 주진 μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

 

보톡 DB λŠ” auto commit을 μ œκ³΅ν•œλ‹€.

auto commit은 μž‘μ—… 쀑간쀑간 μžλ™μœΌλ‘œ commit ν•΄μ£ΌλŠ” 것이닀. auto commit은 켜고 끌 수 μžˆλ‹€.

 

auto commit ν˜„μž¬ μ„€μ • 확인
select @@autocommit;

 1 : μ„€μ •
 0 : λ―Έμ„€μ •

 

 

auto commit κΈ°λŠ₯ 켜고 끄기
set autocommit = 0; -- 끄기
set autocommit = 1; -- 켜기

 

autocommit 끈 μƒνƒœλ‘œ rollback 해보기.

 

μ›Ήμ—μ„œ νŠΈλžœμ μ…˜μ˜ μ˜ˆμ‹œ)

λΈ”λ‘œκ·Έ κΈ€ λͺ©λ‘ μ€‘μ—μ„œ νŠΉμ • 글을 λˆŒλ €μ„ λ•Œ 글은 λ“€μ–΄κ°€μ‘ŒλŠ”λ° 였λ₯˜λ‘œ λ‚΄μš©μ΄ λ‚˜μ˜€μ§€ μ•Šμ•˜λ‹€.

이 λ•Œ κΈ€μ˜ 쑰회수λ₯Ό μ˜¬λžλ‹€κ³  κ³„μ‚°ν•˜λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— νŠΈλžœμ μ…˜μ„ μ‚¬μš©ν•œλ‹€.