728x90
트랜잭션(TRANSACTION)
데이터베이스의 상태를 변화시키는 일종의 작업 단위를 의미한다.
상태를 변화시킨다는 것은 DB에서 SELECT, INSERT, UPDATE, DELETE와 같은 질의어를 통해 데이터에 접근, 변화시키는 것을 의미한다.
COMMIT과 ROLLBACK
COMMIT은 트랜잭션이 성공적으로 끝나 일관성 있는 상태일 경우 하나의 트랜잭션이 끝났음을 알려주는 연산이다.
이 연산이 실행되면 완료된 트랜잭션이 로그에 저장되고, 나중에 ROLLBACK할 때 완료된 트랜잭션 단위로 수행할 수 있게 해준다.
ROLLBACK은 트랜잭션 수행 도중 오류가 발생할 경우 원자성을 보장하기 위해 모든 연산을 취소하는 연산이다.
ROLLBACK연산 수행 시 트랜잭션을 재시작하거나 폐기한다.
MySQL 주요 저장 엔진
저장 엔진 | 특징 |
MyISAM | MySQL 5.1까지의 기본 엔진, 트랜잭션을 지원하지 않는다. |
InnoDB | MySQL 5.5 이후의 기본 엔진, 트랜잭션을 지원한다. |
ISAM | MySQL의 기본이 되는 저장 엔진, 예전 형식으로, MySQL 5.0부터는 설치되지 않는다. |
MEMORY | 데이터를 모두 메모리상에 보관하며, 동작이 빠르다. 트랜잭션을 지원하지 않는다. |
MERGE | MyISAM의 여러 개의 테이블을 하나의 테이블처럼 다룬다 |
트랜잭션을 지원, 미지원 엔진이 있으니 자신이 어떤 엔진을 사용하지 잘 확인하고 작업해야 한다.
구문(Syntax)
현재 자신이 사용하고 있는 저장엔진이 무엇인지 확인하기
SHOW TABLE STATUS WHERE name=`테이블이름`;
혹은
SELECT engine FROM information_schema.TABLES where table_name=`테이블이름` AND table_schema='디비이름';
저장엔진 변경하기
ALTER TABLE `테이블이름` ENGINE=엔진이름;
트랜잭션 시작하기
COMMIT, ROLLBACK이 나올 때까지 실행되는 모든 SQL 추적
START TRANSACTION;
롤백(되돌리기)
START TRANSACTION 실행 전 상태로 되돌림
ROLLBACK;
커밋(반영하기)
START TRANSACTION이 실행된 후 입력한 명령어 적용
COMMIT;
롤백 혹은 커밋후에는 다시 트랜잭션을 시작해야 한다.
TRANSACTION -> ROLLBACK -> TRANSACTION -> COMMIT
START TRANSACTION; // 트랜잭션 시작
SELECT * FROM my_table; // 초기상태 보여줌
DELETE FROM my_table WHERE gender = 'M'; // 데이터의 수정
SELECT * FROM my_table; // 수정 후의 상태 보여줌
ROLLBACK; // 트랜잭션이 선언되기 전 상태로 되돌아감
SELECT * FROM my_table; // 수정 전의 초기 상태를 보여줌
START TRANSACTION; // 다시 트랜잭션 시작
DELETE FROM my_table WHERE gender = 'M'; // 수정
COMMIT; // 트랜잭션 이후 모든 동작을 적용
SELECT * FROM my_table; // 적용된 결과 보여줌
728x90
'MySQL' 카테고리의 다른 글
31. MySQL tinyint(1) vs tinyint(4) 차이 (0) | 2021.07.25 |
---|---|
30. MySQL 날짜컬럼 변경시 자동으로 업데이트 되게 하기 (0) | 2021.07.23 |
28. MySQL AUTO_INCREMENT 값 초기화 (0) | 2021.07.20 |
27. MySQL int(11) 그리고 ZEROFILL (0) | 2021.07.19 |
26. MySQL 테이블 생성 쿼리 보기 (0) | 2021.07.19 |