티스토리 뷰

트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키는 일종의 작업 단위를 의미한다. 상태를 변화시킨다는 것은 DB에서 SELECT, INSERT, UPDATE, DELETE와 같은 질의어를 통해 데이터를 접근하고 변화시키는 것을 뜻한다.

그리고 트랜잭션은 아래와 같은 특징을 가지고 있다.

  • 원자성(Atomicity)
  • 일관성(Consistency)
  • 독립성(Isolation)
  • 영구성(Durability)

원자성 트랜잭션의 처리가 데이터베이스에 모두 반영되거나 그렇지 않아야 한다. 완벽히 수행되지 않은 상태에서 오류가 발생하면 트랜잭션이 모두 취소되어야 한다.

일관성 트랜잭션 실행이 완료된 뒤 언제나 일관성 있는 상태를 유지해야한다.

독립성 둘 이상의 트랜잭션이 동시에 실행될 때, 어느 하나라도 다른 트랜잭션의 연산에 끼어들 수 없다. 하나의 트랜잭션이 완벽히 수행되고 나야 해당 결과를 참조할 수 있다.

영구성 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야한다.

Commit과 Rollback

Commit은 트랜잭션이 성공적으로 끝나고 일관성 있는 상태일 경우 하나의 트랜잭션이 끝났음을 알려주는 연산이다. 이 연산이 실행되면 완료된 트랜잭션이 로그에 저장되고, 나중에 Rollback할 때 완료된 트랜잭션 단위로 수행할 수 있게 해준다.

Rollback은 트랜잭션 수행 도중 오류가 발생할 경우 원자성을 보장하기 위해 모든 연산을 취소(Undo)하는 연산이다. Rollback연산 수행 시 트랜잭션을 재시작하거나 폐기한다.

MySQL에선 InnoDB를 사용

MySQL 저장 엔진에는 ISAM, MyISAM, InnoDB, Archive 등이 있다. 이중 가장 많이 사용되고 트랜잭션을 지원하는 엔진으로는 InnoDB를 많이 사용한다. 나는 RDS로 MySQL을 사용할 때 기본 설정이 InnoDB여서 잘 모르고 사용했었는데 트랜잭션을 지원하지 않는 저장엔진이 있기 때문에 트랜잭션을 사용하기 위해서는 지원하는 엔진인지 확인이 필요하다.

현재 자신이 사용하고 있는 저장엔진이 무엇인지 확인하려면 다음 명령어를 쳐보면 된다.

SHOW TABLE STATUS WHERE name='테이블명';

혹은

SELECT engine FROM information_schema.TABLES where table_name='테이블명' AND table_schema='디비명';

저장엔진을 변경하고 싶다면 아래 명령어를 참고하자.

ALTER TABLE '테이블명' ENGINE=엔진명;

'프로그래밍 > MySQL' 카테고리의 다른 글

검색 기능 구현 시 DB성능에 관한 고찰🤔  (0) 2021.02.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함