mysql 트랜잭션, 커밋, 롤백, 테이블 락킹

mysql 트랜잭션, 커밋, 롤백, 테이블 락킹

QA

mysql 트랜잭션, 커밋, 롤백, 테이블 락킹

본문

며칠간의 트랜잭션 관련 질의에 도움을 받으며 한단계 성장할 수 있었습니다.

답변 주시는 분들 정말 감사드립니다. (꾸벅)

 

mysql에서 동시성 이슈 해결을 위해 

오토커밋 오프, 트랜잭션, 커밋, 롤백, 테이블 락킹을 이용한 코드 흐름을 요즘 유행하는 서비스(?)를 이용해 구해보았습니다

 

// 오토커밋 오프
mysqli_autocommit($conn, false);

// 트랜잭션 시작
mysqli_query($conn, "START TRANSACTION");

// 테이블 락킹
mysqli_query($conn, "LOCK TABLES table_name WRITE");

// SELECT 구문
$result = mysqli_query($conn, "SELECT value FROM table_name WHERE condition");
$row = mysqli_fetch_assoc($result);

// UPDATE 구문
$update = mysqli_query($conn, "UPDATE table_name SET column = new_value WHERE condition");

// UPDATE 구문이 성공인지 확인
if ($update) {
   // 성공시 커밋
   mysqli_commit($conn);
} else {
   // 실패시 롤백
   mysqli_rollback($conn);
   exit;
}

// 테이블 언락킹
mysqli_query($conn, "UNLOCK TABLES");

// 오토커밋 다시 온
mysqli_autocommit($conn, true);

 

1.

위 흐름이 최근 배운 내용들의 종합인데, 적절한가요?

2.

테이블 락까지 거는건 성능이슈로 권장하지 않나요?

저는 read, write 둘다 락을 걸어야 트랜잭션이 가장 안전하게 보장받는다고 생각하고 있는데

맞나요?

고수님들의 종합적 또는 세부적인 평가 부탁드려요

이 질문에 댓글 쓰기 :

답변 1

1. 위 흐름은 기본적인 트랜잭션 처리 방식입니다. 하지만, 실제 서비스에서 사용할 때에는 각각의 상황에 따라 수정이 필요할 수 있습니다.

 

2. 테이블 락은 성능 이슈가 있을 수 있어서 권장하지 않은 경우도 있습니다. 가능하면 경우에 따라 테이블 락을 사용하지 않는 것이 더 좋은 성능을 보장할 수 있습니다. 또한, 테이블 락은 동시에 여러 트랜잭션이 실행되는 경우 적절하지 않을 수도 있으므로 각 상황에 따라 적절한 락 기법을 선택하는 것이 중요합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,620 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT