CodingSpace

[얄코/갖고노는 MySQL 데이터베이스] Chapter 4. MySQL 더 깊이 알아가기 - #4. 트랜잭션 - 함께가 아니면 하지 않아! 본문

Online Class/갖고노는 MySQL 데이터베이스

[얄코/갖고노는 MySQL 데이터베이스] Chapter 4. MySQL 더 깊이 알아가기 - #4. 트랜잭션 - 함께가 아니면 하지 않아!

개발자_조이킴 2022. 9. 11. 17:27


What:

  • 트랜잭션 (Transaction)
  • 모든 구문이 성공 OR 모든 구문이 실패
    • 어떤 구문은 성공하고 어떤 구문은 실패하면 안될때 트랜잭션을 사용
    • 원자성 (Atomicity)
      • 은행 송금 예시
      • A가 B 돈을 보냄:
        • A 계좌에서 돈이 출금
        • B 계좌에서 돈이 입금
        • 만약, "A 계좌에서 돈이 출금"라는 SQL 구문만 실행되고, 오류가 발생하여 "B 계좌에서 돈이 입금" SQL 구문이 실행되지 않으면 서비스를 복구하는데 막대한 비용이 듬!
        • 만약 위의 두 SQL 구문이 모두 성공하거나 실패하게 만들면 위와 같은 문제가 없음! → 이때 트랜잭션을 사용함
-- 트랜잭션 시작
START TRANSACTION;

DELETE FROM sections
WHERE section_id > 0;

SELECT *FROM sections;

-- 롤백
-- 롤백하기전 커밋을 하지 않았기 때문에
-- DELETE SQL 구문은 최종적으로 반영되지 않음.
ROLLBACK;

SELECT *FROM sections;

 

  • 커밋 (COMMIT)
    • 메모리상의 변화를 영구저장
-- 트랜잭션 시작
START TRANSACTION;

DELETE FROM sections
WHERE section_id > 0;

SELECT *FROM sections;

-- 커밋
COMMIT;

-- 롤백
ROLLBACK;

-- 롤백을 하기전에 커밋을 했기 때문에
-- DELETE SQL 구문이 반영됨
SELECT *FROM sections;

 

  • SAVEPOINT
    • 롤백할 중간지점 설정
-- 트랜잭션 시작
START TRANSACTION;

INSERT INTO sections
(section_name, floor)
VALUES('인도식', 2);

SAVEPOINT indian;

INSERT INTO sections 
(section_name, floor)
VALUES('남미식', 3);

SELECT *FROM sections;

ROLLBACK TO indian;

SELECT *FROM sections;

COMMIT;

 

 


References. 


For Developer. 

  • 잘못되거나 부족한 부분이 있다면 언제든지 댓글 부탁드립니다 :)
Comments