sql이 수행되는것과, 그것이 db에 반영되는것은 별개임
transaction이 commit되어야 sql수행된게 db에 확정됨
Transaction ( 트랜잭션 )
데이타베이스 처리 작업이 모두 완료되거나 아니면 모두 취소되게 되는 작업의 단위
하나의 트랜잭션은 Commit(작업완료)되거나 Rollback(취소)된다
작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능
예를 들어, 하나의 DELETE문으로 10개의 레코드를 삭제할 때, 이는 하나의 트랜잭션이기 때문에, 5개는 지워지고 중간에 문제가 생겨 나머지 5개는 살아있는 상태가 되지 않는다는 것이다. 이런 에러 상황에서는 DELETE 자체가 취소되어 지워진 5개가 복원(rollback)된다.
복잡한 트랜잭션을 쓸 경우, 트랜잭션의 시작(BEGIN TRAN)과 끝(COMMIT TRAN)을 명시적으로 표시해 주어야 한다.
MySQL에서는 디폴트로 autocommit이 설정되있어서, 세미콜론을 한 번 찍을 때마다 DB에서 자동으로 commit 해준다
SELECT * FROM `user`;
delete from `user`;
rollback;
/* 롤백 안먹힘, MySQL에서는 디폴트로 autocommit이 설정되있기떄문
세미콜론을 한 번 찍을 때마다 DB에서 자동으로 commit 해주는 시스템 */
start transaction; /* COMMIT, ROLLBACK이 나올 때까지 실행되는 모든 SQL 추적 */
delete from chickenbuyer;
rollback;
commit과 rollback
start transaction;
delete from chickenbuyer where id = 2;
rollback;
start transaction;
delete from chickenbuyer where id = 9;
commit;
rollback; /* 윗줄에서 commit 해서 롤백해도 복구 안됨*/
save point를 지정하면, 그곳까지만 rollback이 가능
start transaction;
delete from chickenbuyer where id = 5;
savepoint A; /* save point를 지정하면, 그곳까지만 rollback하는 것도 가능 */
delete from chickenbuyer where id = 1;
rollback to A;
delete from chickenbuyer where id = 7;
rollback;
SELECT @@AUTOCOMMIT;
으로 오토커밋 여부 확인
( 1일 경우 오토 커밋 ON / 0일 경우 오토 커밋 OFF )


SET AUTOCOMMIT = 0;
으로 오토커밋 on / off 지정가능
'DB > RDB' 카테고리의 다른 글
| MySQL에서 데이터 Byte (0) | 2024.12.27 |
|---|---|
| 트랜잭션 확인하기 (0) | 2024.10.30 |
| MySQL워크벤치로 서로다른 세션 생성하기 (0) | 2024.10.30 |
| MySQL의 동시성 (0) | 2024.08.21 |
| MySQL서버 구조 (0) | 2024.08.21 |