제수기 - 제발 수업내용을 기억해라.
-- DCL 하위로 구분되는 SQL문
-- Transaction Control Language 트랜잭션 제어 언어
-- COMMIT, ROLLBACK, SAVEPOINT등이 있음.
auto-commit
모드에서도 commit/rollback
호출 전까지는 자동 커밋되지 않기 때문이다. 오히려 수동(Manual)
로 두고 쓰면 dead lock
현상이 나타날 수도 있다. dead lock 현상이란?
:
Manual로 돌리고 26번 menu_code
의 menu_price
를 0
원으로 바꿨다.
commit
을 하기 전에, 다른 client를 사용해서 정말 바뀌었는지 아닌지 확인해보자. cmd
로 확인해보자.
commit
전에 안 바뀌는 이유는 아래와 같다. 이해도 부족. 복습 필요.commit
을 실행해야 적용된다.rollback
을 하면 마지막 commit
이후의 변경사항을 폐기해버린다. (Git의 커밋과 다름)commit;
-- 변경사항 적용rollback;
-- 변경사항 폐기 (마지막 커밋으로 복구)-- 한꺼번에 수행되어야 할 최소의 작업 단위를 말함
-- 논리적 작업 단위 (LUW, Logical Units of Work)
-- 하나의 트랜잭션으로 이루어진 작업들은 반드시 한꺼번에 완료가 되어야 하며,
-- 그렇지 않은 경우에는 한꺼번에 취소 되어야 함
-- 예)계좌이체 업무 처리를 생각해보자
-- 1. 내계좌에서 송금하는 금액만큼 잔액 차감.
-- 2. 상대방계좌에 송금한 금액만큼 잔액 증가.
-- 3. 완료
왜 한꺼번에 돼야 할까?
트랜잭션은 동시에 성공해야 하는 작업들이다. 둘다 완료돼야 커밋이 되고 하나라도 실패하면 롤백.
# 트랜잭션 ACID 원칙
-- 1. Atomicity : 원자성. (예전에는 원자가 가장 작은 단위였음. 그때 정해진 원칙 이름이라.. 그냥 더 쪼개지지 않는 특징이 있다고 이해하면 됨)
-- - 트랜잭션과 관련된 일은 모두 실행되던지 모두 실행되지 않도록 하던지를 보장하는 특성이다.
-- 2. Consistency : 일관성.
-- - 트랜잭션이 성공했다면, 데이터베이스는 그 일관성을 유지해야 한다.
-- - 일관성은 특정한 조건을 두고, 그 조건을 만족하는지를 확인하는 방식으로 검사할 수 있다.
-- 3. Isolation : 독립성.
-- - 트랜잭션을 수행하는 도중에 다른 연산작업이 끼어들지 못하도록 한다.
-- - 임계영역을 두는 것으로 달성할 수 있다. 기본적으로 READ_COMMITED 방식을 적용한다.
-- 4. Durability : 지속성.
-- - 성공적으로 트랜잭션이 수행되었다면, 그 결과는 완전히 반영이 되어야 한다.
-- - 완전히 반영되면 로그를 남기게 되는데, 후에 이 로그를 이용해서 트랜잭션 수행전 상태로 되돌릴 수 있어야 한다.
-- - 때문에 트랜잭션은 로그저장이 완료된 시점에서 종료가 되어야 한다.
# TCL 구분
-- 1. COMMIT : 트랜잭션 작업이 정상 완료 되면 변경 내용을 영구히 저장 (모든 savepoint 삭제)
-- 2. ROLLBACK : 트랜잭션 작업을 모두 취소하고 가장 최근 commit 시점으로 이동
-- 3. SAVEPOINT <savepoint명> : 현재 트랜잭션 작업 시점에 이름을 지정
-- 하나의 트랜잭션 안에서 구역을 나눌수 있음
-- 4. ROLLBACK TO <savepoint명> : 트랜잭션 작업을 취소하고 savepoint 시점으로 이동
balance
: