[maria db] sql문에서의 transaction

cochocho·2025년 7월 3일

db

목록 보기
1/6

transaction

업무 단위 (묶어서 처리해야하는 작업 단위)
자동으로 commit 안하는 경우 (autocommit off) = transaction의 시작
여러 query 문을 작성하고 한번에 commit

commit을 직접 실행하기 전에는 임시 저장이므로 이에 대한 rollback이 가능

commit 실행 후 db에 실제 반영
-> rollback 불가

모두 성공하거나 모두 실패하도록 하는 업무의 단위
ex) 장바구니에서 모든 물품 결제 시도
-> 하나의 물품이라도 결제 실패한 경우 모든 물품에 대한 결제 시도가 취소됨

transaction의 원칙

atomic(원자성) : 한번에 db로 반영 혹은 rollback
= 모두 성공 혹은 모두 실패
consistent(일관성) : transaction 이전 이후 db 상태가 일관되어야 함
isolation(격리성) : 동시에 여러 transaction 실행 시 서로 영향 받지 않고 독립 실행
durability(지속성) : 트랜잭션 완료 후 결과는 영구적 유지

transaction이 불가능한 상황

  • trigger
    이미 실행 중인 transaction의 일부로
    상위 쿼리의 transaction에 속해있는 형태
    하위에서 담당하는 처리 로직이 있는 것

-> 별도의 transaction을 가지게 되면 일관성이 깨지는 원인이 될 수 있음

  • stored procedure : 원칙적으로는 가능
    • autocommit = 1 (기본값) -> transaction x
    • 중첩된 transaction 불가
      transaction 있는 상황에서 procedure 호출하는 경우 불가
    • transaction을 포함한 procedure의 조작에 대한 까다로움
      transaction 도중에 오류 시 rollback이 필요
      예외 처리 로직을 따로 추가해줘야함(rollback)
      -> 이에 대한 처리 없이는 transaction 처리 단위가 열린 상태로 남거나 부분 commit 가능한 문제 발생

0개의 댓글