SQL공부하다가 트랜잭션 부분을 보는데 잘 모르는 것이 있어서 질문 드립니다. 제가 보는 책에 SQL 1999 표준에서 begin atomic~end 구문이 여러 SQL을 싸서 단일 트랜잭션을 형성한다고 되어 있는데 무슨 소린지 잘 이해가 안가서 자세한 설명
을 부탁 드립니다.
트랜잭션의 의미를 정확히 이해하고 계신지..
트랜잭션이란 간단히 말해 하나로 처리해야할 일의 단위라고 설명할수 있습니다. (보통 은행업무로 설명을 하죠 ^^)
begin atomic~ end 이부분은
트랜잭션의 시작(begin)부분을 의미하고
atomic(트랜잭션의 특성, 원자성~ 어쩌구
트랜잭션의 끝(end)을 의미합니다.
위 시작과 끝을 하나의 블락이라고 가정하면
블락내에서의 디비데이터를 변경하는 쿼리문에 대해서
단일 트랜잭션으로(하나의 단위로) 처리한다는 말입니다.
제가 mysql의 이노디비 사용하는데..
보통 이런식으로 작업합니다..
mysql_query("begin", $con); 트랙잭션의 시작을 의미합니다.
res1 = insert into~~ --> 임시 인서트
res2 = update ... --> 임시 업데이트
if(res1 && res2)
mysql_query("commit", $con) <-- 이부분에서 정말디비에 기록합니다.
else
mysql_query("rollback", $con); <- 트랙잭션 취소.(현재 진행했던 작업을 다 취소합니다.
굵은 글씨 부분이 단일 트랜잭션을 형성하는거죠..
이해가 되셨는지 자기가 알고 있는걸 설명으로 하기는 힘들군요 ㅡ,.ㅡ;
여러 SQL을 싸서 단일 트랜잭션을 형성한다라는 것은.....
예를 들면, 게임을 하실 때 (( ㅡㅡ;;))
끝까지 깨야 하는 게임이 있다고 할 때, 중간에 실패하면 지금까지 한 거 다 없었던 걸로 하고 다시 처음부터 하는 거라고 생각하시면 됩니다. 끝까지 완전하게 성공해야 다음판으로 넘어갈 수 있겠지요.
즉, SQL문이 여러개가 있어서 여러 테이블을 update 한다고 가정을 합시다.
만약 table A, B, C를 차례대로 update 한다고 할때,
A를 update 한 후, 문제가 생겼다면 어떻게 해야 할까요?
나중에 B, C를 update 할 수도 있겠지요...하지만 누가 또 A를 update 해 버렸고 A를 근거로 B, C를 update 해야 하는 상황이라면 엉망이 되어버리겠지요.
그래서 이럴 경우, A, B, C 를 순서대로 update 하지 못하고 A만 update 했다면, 이건 아예 없었던 일로 합니다. 즉 A, B, C update 는 한 운명이 되는거죠 . 모두 성공하면 다음 단계로 통과하는 거구요.