2020. 1. 31. 16:25ㆍIT-개발/DB
COMMIT과 ROLLBACK 를 mysql로 이해하려고 하는데~ 갑자기 SAVEPOINT 가 보이네요~ ㅠㅠ
내용이 좋아서 저장!
(펌 : https://rh-cp.tistory.com/41?category=661522 )
https://rh-cp.tistory.com/41?category=661522
TCL(Transaction Control Language)이란?
▷ DCL(Data Control Language)에서 트랜잭션을 제어하는 명령인
COMMIT과 ROLLBACK만을 따로 분리해서 TCL이라고 표현하고 있습니다.
◈COMMIT 연산
▷ COMMIT 연산은 트랜잭션 처리가 정상적으로 종료되어 트랜잭션이 수행한 변경 내용을 데이터베이스에 반영하는 연산입니다.
▷ 내용을 변경한 트랜잭션이 완료되면 그 트랜잭션에 의해 데이터베이스는 새롭게 일관된 상태로 변경되며, 이 상태는 시스템 오류가 발생하더라도 취소되지 않습니다.
(COMMIT 연산 실행)
※ 지금까지 해온 작업들을 데이터베이스에 반영합니다.
◈ROLLBACK 연산
▷ ROLLBACK 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성이 깨졌을 때, 트랜잭션이 행한 모든 변경 작업을 취소하고 이전 상태로 되돌리는 연산입니다.
▷ ROLLBACK 연산 시 해당 트랜잭션은 받았던 자원과 잠금(LOCK)을 모두 반환하고, 재시작(Restart)되든지 폐기됩니다.
(ROLLBACK 연산 실행)
※ 마지막 COMMIT 이후의 작업으로 돌아갑니다.
만약 COMMIT를 하지 않았다면 모든 작업이 사라집니다.
(COMMIT를 하지 않고, ROLLBACK 연산 실행)
※ 테이블의 데이터를 삭제한 후 다시 테이블의 데이터를 출력하면 데이터가 사라져 있습니다.
하지만, ROLLBACK를 하게 된다면 데이터 삭제 후 COMMIT를 삭제하지 않았기에, 데이터가 다시 복구가 됩니다.
(COMMIT를 한 뒤, ROLLBACK 연산 실행)
※ 테이블의 데이터를 삭제한 후 테이블의 데이터를 출력하게 되면 데이터가 사라져 있습니다.
그 후 COMMIT연산을 한 뒤, ROLLBACK연산을 하고, 다시 테이블 데이터를 출력하게 되면, 데이터는 사라진 채로 출력됩니다. 그 이유는 COMMIT연산에 의해 데이터가 DB에 반영되었기 때문입니다.
◈SAVEPOINT
▷ SAVEPOINT는 현재의 트랜잭션을 작게 분할하는 명령어 입니다.
▷ 저장된 SAVEPOINT는 ROLLBACK TO SAVEPOINT문을 사용하여 지정한 곳까지 ROLLBACK 할 수 있습니다.
▷ 여러개의 SQL문을 수반하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 SAVEPOINT를 지정할 수 있습니다.
▷ 이 SAVEPOINT는 차우 ROLLBACK과 함께 사용하며, 현재 트랜잭션 내의 특정 SAVEPOINT까지 ROLLBACK 할 수 있습니다.
(SAVEPOINT 만들기)
※ SAVEPOINT 포인터명;
※ 테이블에 첫번째 값을 넣은 후 SAVEPOINT를 만듭니다. 그후 두번째, 세번째 값을 넣고 테이블의 데이터를 출력하게 되면, 세개의 값이 출력됩니다. 그후 C1이라는 SAVEPOINT로 ROLLBACK연산을 수행하게 된다면, 마지막 COMMIT이 실행된 그 이후로 돌아가게 됩니다. 그 후 테이블의 데이터를 출력하게 되면 첫번째 값만 출력되게 됩니다.
※SAVEPOINT 유의사항
1. SAVEPOINT 후 COMMIT연산을 하게 된다면, COMMIT 연산 이전에 만든 SAVEPOINT들은 모두 사라지게 됩니다.
2. SAVEPOINT는 여러개 생성할 수 있습니다.
'IT-개발 > DB' 카테고리의 다른 글
(mariadb) like 문 (0) | 2020.02.06 |
---|---|
[mysql] MySQL 하지 말아야 할 것 17가지 (펌) (0) | 2020.01.15 |
[mariadb] utf-8 설정하기 (0) | 2019.07.09 |
[mariadb] 유용한 명령어 모음 (펌 + 혼합) (0) | 2019.05.08 |
[mariaDB] UNION 연산자 (펌) (0) | 2019.05.08 |