START TRANSACTION
INSERT INTO test.stock VALUES (1,"참기름",7000); // 1
INSERT INTO test.stock VALUES (2,"생수",3000); // 2
COMMIT;
트랜젝션 모드가 켜지면 1번,2번 코드는 실행이 된다.
하지만 COMMIT으로 넘어오기 전에는 DB에 변경사항이 저장되지 않고
COMMIT을 실행하고 나서야 DB에 변경사항이 반영된다.
START TRANSACTION
INSERT INTO test.stock VALUES (1,"참기름",7000); // 1
INSERT INTO test.stock VALUES (2,"생수",3000); // 2
ROLLBACK;
트랜젝션 모드가 켜지면 1번,2번 코드는 실행이 된다.
하지만 COMMIT으로 넘어오기 전에는 DB에 변경사항이 저장되지 않고
ROLLBACK을 실행하면 최종적으로 변경사항이 반영되지 않는다.
서비스를 구매하는 상황을 생각해볼 수 있다. 만약 10000원짜리 물건을 내가 구매하는데, 2000원을 페이백해준다는 조건으로 내가 물건을 구매한다고 가정해보면
account -= 10000
account += 2000
결론적으로 계좌에서 8000원이 빠져나가는 것이다. 그런데 중간에 문제가 발생해서 account+=2000이 실행되지 않는다고 하면, 계좌에서 10000원이 빠져나가는 것이 되는 것이다. 이와 같은 상황을 트랜잭션을 이용하면 막을 수 있는데,
START TRANSACTION
account -= 10000
account += 2000
만약 안의 코드에 문제가 없으면 COMMIT , 문제가 있으면 ROLLBACK
같은 방식으로 구현하면 코드가 한줄만 잘못 작동해도 DB에 변경사항을 잘못 저장하는 일이 없어지게 된다.