제수기 > SQL > DCL

Eunbi Jo·2024년 12월 27일
0

제수기

목록 보기
18/90
제수기 - 제발 수업내용을 기억해라.

DCL

💥TCL

-- DCL 하위로 구분되는 SQL문
-- Transaction Control Language 트랜잭션 제어 언어
-- COMMIT, ROLLBACK, SAVEPOINT등이 있음.
  • 특별한 경우가 아니라면 '자동'에 놓고 쓰면 된다.
  • 일단 수동으로 놓고 써볼텐데 사실 크게 상관 없다. auto-commit 모드에서도 commit/rollback 호출 전까지는 자동 커밋되지 않기 때문이다. 오히려 수동(Manual)로 두고 쓰면 dead lock 현상이 나타날 수도 있다.
dead lock 현상이란?
: 
  • Manual로 돌리고 26번 menu_codemenu_price0원으로 바꿨다.

  • commit을 하기 전에, 다른 client를 사용해서 정말 바뀌었는지 아닌지 확인해보자. cmd로 확인해보자.

  • commit 전에 안 바뀌는 이유는 아래와 같다. 이해도 부족. 복습 필요.
    💥 근데 왜 굳이 cmd가서 확인하는거지 왜 다른 client에서..?
  • 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 :

0개의 댓글