트랜잭션(TRANSACTION)

트랜잭션이란?

 

A계좌에서 B계좌로 100만원을 송금한다고 합시다.

이때 시스템은  ① A계좌 잔액 - 100만원, ② B계좌 잔액 + 100만원 두 작업을 수행하여야 합니다.

만약 ① A계좌 잔액 - 100만원 만 수행되고 ② B계좌 잔액 + 100만원,이라는 작업이 수행되기 전에 오류가 발생한다면, 100만원이 증발하는 상황이 발생하게 됩니다.

 

이렇게 오류가 발생하는 상황이 일어나지 않게 하려면, 

① A계좌 잔액 - 100만원, ② B계좌 잔액 + 100만원 두 작업이 모두 수행되도록 하거나

① A계좌 잔액 - 100만원, ② B계좌 잔액 + 100만원 두 작업을 모두 수행되지 못하도록 해야 합니다.

따라서 두 작업을 묶어서 하나의 논리적 작업으로 처리해야 합니다. 즉, 하나로 묶인 논리작업은 모든 작업이 성공적으로 완료 되거나, 아예 실행되지 않은 상태(모든 작업이 취소된 상태)로 있어야 합니다.

 

이렇게 하나로 묶인 논리작업을 트랜잭션 이라고 한다.

 

트랜잭션의 특성

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다. 이번 게시글에서는 트랜잭션의 4가지 특징에 대해 알아보겠습니다. 트랜잭션의 핵심적인 특징 이라고 하는데요. 줄여서 'ACID' 라고 부릅니다. 트랜잭션은 아래와 같이 4가지 특징을 가지고 있습니다.

 

 

(1) 원자성 (Atomicity)

- 트랜잭션과 관련된 작업들은 부분적으로 실행되다가 중단되지 않는 것을 보장한다는 의미입니다.

- '완전히 실행되거나 또는 아예 실행되지 않는다(All Or Nothing)' 

- 예를 들어 계좌로 돈을 보내는 중에 연결이 끊겼다면 이 작업은 아예 철회되어야 합니다.

 

(2) 일관성 (Consistency)

- 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미합니다.

- 여러 개의 작업이 수행될 때 이전에 수행된 작업이 다음 작업에 영향을 줘야 한다는 뜻입니다.

- 예를 들어 'a에 2를 대입', 'a에 3를 가산' 이라는 작업이 있으면 순서대로 수행해서 a에 5가 저장되어 있어야 합니다. (a = 2+3 이므로)

 

(3) 독립성 (Isolation)

- 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미합니다.

- 계좌 송금이 완료 될때까지, 다른 계좌로 송금할 수 없다는 것.

- 예를 들어 a에 0이 저장되어 있을 때 2를 대입하는 작업이 수행 중이라면 그 누구도 a값을 읽어올 수 없습니다. 따라서 해당 트랜잭션 작업이 끝났을 때 a값 2를 읽어오게 됩니다.

 

(4) 지속성 (Durability)

- 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미합니다.

- 예를 들어 a에 2를 대입했으면 a값을 변경하지 않는 이상 2가 계속 저장되어 있어야 합니다.

 

 

 

 

 

 

 

 

 

 

 

TCL(Transaction Control Language) 명령어

 

ROLLBACK : 정해진 시점 이후에 실행된 명령어의 실행을 취호하는 명령어 입니다.

ROLLBACK;

 

아래 예제는 UPDATE문을 통해 수정된 데이터를 이전 상태로 돌린 예제 입니다.

 

'DataBase' 카테고리의 다른 글

트랜잭션(TRANSACTION) - 작성중  (1) 2025.11.02
서브 쿼리를 이용한 데이터 추가  (0) 2025.10.04
데이터 삭제 DELETE  (0) 2025.10.03
테이블에 날짜 데이터 입력하기  (0) 2025.10.03
컬럼에 NULL 데이터 추가  (0) 2025.10.02

 

서브 쿼리를 이용한 데이터 추가

서브쿼리를 사용하면 SELECT문으로 한번에 여러 행의 데이터를 추가할 수 있습니다.

예를들어 사원정보(EMP) 테이블에서 사원급여정보(SALGRADE) 테이블을 참고하여 급여등급(GRADE)이 1인 사원만을 EMP_TEMP 테이블에 넣고 싶다면 서브쿼리를 포함한 INSERT문을 사용하시면 됩니다.

INSERT INTO EMP_BAK (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO
    FROM EMP E, SALGRADE S
    WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL 
        AND S.GRADE = 1;

 

위의 예제에서 보는 것과 같이 INSERT문에서 서브쿼리를 사용할때는

  • VALUES절을 사용하지 않아야 하고, 
  • 데이터를 추가할 테이블과 서브쿼리의 열의 갯수가 일치해야 하며,
  • 데이터를 추가할 테이블과 서브쿼리의 자료형이 일치해야 합니다.

 

'DataBase' 카테고리의 다른 글

트랜잭션(TRANSACTION) - 작성중  (1) 2025.11.02
TCL(Transaction Control Language) 명령어  (0) 2025.11.01
데이터 삭제 DELETE  (0) 2025.10.03
테이블에 날짜 데이터 입력하기  (0) 2025.10.03
컬럼에 NULL 데이터 추가  (0) 2025.10.02

 

 

데이터 삭제 DELETE

DELETE문은 테이블에 있는 데이터를 삭제한 때 사용 됩니다.

 

기본형식

DELETE FROM 테이블명
[WHERE 삭제할_대상_행을_선별하는_ 조건식];

 

이때 WHERE 절을 생략하면 모든 데이터가 삭제 됩니다.

 

 

데이터 일부만 삭제하기

DELETE문을 사용하여 EMP_TEST2 테이블에서 직책이 MANAGER인 사원만 삭제해 봅시다.

DELETE FROM EMP_TEST2
WHERE JOB = 'MANAGER';

 

WHERE절의 조건을 이용하여 특정 행을 삭제 하였습니다.

 

 

서브쿼리를 이용한 데이터 삭제

서브쿼리를 이용하여 EMP_TEST2테이블에서 급여가 3등급이고, 부서 번호가 30인 직원들을 삭제해 보자.

DELETE FROM EMP_TEST2
WHERE EMPNO IN (SELECT E.EMPNO
        FROM EMP_TEST2 E, SALGRADE S
        WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
            AND GRADE = 3
            AND DEPTNO = 30); 

 

 

데이터 전체 삭제하기

특별한 경우를 제외하고 흔하지는 않지만, 데이터 전체를 삭제하려면 WHERE절을 생략 하면 됩니다.

DELETE FROM EMP_TEST2;

 

 

 

 

테이블에 날짜 데이터 입력하기

 

1. 특정일 입력하기

 EMP 테이블의 형식을 가져와서 만든 EMP_BAK 테이블의 HIREDATE 컬럼에 날짜 데이터를 입력해 봅시다.

INSERT INTO EMP_BAK
    VALUES (1111, 'ANN', 'FREE', NULL, '01/12/25', 2500, 1000, 10);

 

날짜의 형식을 '01/12/25' 대신 '2002-12-25'의 형식으로 입력해도 자료는 정상적으로 입력 됩니다.

INSERT INTO EMP_BAK
    VALUES (1111, 'ANN', 'FREE', NULL, '2002-12-25', 2500, 1000, 10);

 

 

2. 오늘 날짜 입력하기

날짜를 입력할 때 특정일이 아닌 오늘의 날짜를 입력해 봅시다. 

INSERT INTO EMP_BAK
    VALUES (1111, 'ANN', 'FREE', NULL, SYSDATE, 2500, 1000, 10);

 

 

'DataBase' 카테고리의 다른 글

서브 쿼리를 이용한 데이터 추가  (0) 2025.10.04
데이터 삭제 DELETE  (0) 2025.10.03
컬럼에 NULL 데이터 추가  (0) 2025.10.02
데이터 수정(변경) UPDATE  (0) 2025.10.02
테이블에 데이터 추가 INSERT 문  (0) 2025.10.01

+ Recent posts