everyday com-eat
작성일
2022. 2. 14. 11:22
작성자
갱수터
728x90

정의

- 하나의 작업을 수행하기 위해 필요한 데이터베이스 연산들을 모아 놓은 것

- 작업 수행에 필요한 SQL 문들의 모임

- 논리적인 작업의 단위

- 장애 발생 시 복구 작업이나 병행 제어 작업을 위한 중요한 단위로 사용됨

- 데이터베이스의 무결성과 일관성을 보장하기 위해 작업 수행에 필요한 연산들을 하나의 트랜잭션으로 제대로 정의하고 관리해야 함

특성

Atomicity (원자성)

- 트랜잭션의 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 하는 all-or-nothing

Consistency (일관성)

- 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 한다.

Isolation (격리성, 고립성)

- 수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션들이 중간 연산 결과에 접근할 수 없다.
- 여러 트랜잭션이 동시에 수행되더라도 마치 순서대로 하나씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수 있도록 제어하는 기능 필요

Durability (지속성, 영속성)

- 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 영구적이어야 한다.
- 지속성의 보장을 위해서는 장애 발생 시 회복 기능이 필요

 

 

상태

I(nsert) ->
D(elete) ->
U(pdate)


I 부분완료 > D 실패 => I 이전 시점으로 Rollback
I 부분완료 > D 부분완료 > U 부분완료 > 완료 Commit

활동

- 트랜잭션이 수행을 시작하여 현재 수행 중인 상태

부분완료

- 트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태

완료

- 트랜잭션이 성공적으로 완료되어 commi연산을 실행한 상태
- 트랜잭션이 수행한 최종 결과를 데이터베이스에 반영하고 데이터베이스가 새로운 일관된 상태가 되면서 트랜잭션이 종료됨. 

실패

- 장애가 발생하여 트랜잭션의 수행이 중단된 상태

철회

- 트랜잭션의 수행 실패로 rollback 연산을 실행한 상태
- 지금까지 실행한 트랜잭션의 연산을 모두 취소하고 트랜잭션이 수행되기 전의 데이터베이스 상태로 되돌리면서 트랜잭션이 종료됨.
- 철회 상태로 종료된 트랜잭션은 상황에 따라 다시 수행되거나 폐기됨.

 

 

MySQL 실습

- mysql은 자동커밋이 기본값이기 때문에 autocommit = false로 바꿔줘야한다.

- @@은 시스템변수

- 하나의 기능을 하나의 묶음으로 보기 ex) 회원가입, 로그인 등

- 단계 : Select id 중복체크 > 중복 아니라면 insert / 중복이라면 rollback > Insert완료시 commit

SELECT @@autocommit;	변수조회
SET @@autocommit:=0;	변수초기화
SELECT @@autocommit;	변수조회

START TRANSACTION;	/* 트랜잭션 처리 시작 */

SELECT * FROM tb_member_trigger;
DELETE FROM tb_member_trigger;
SELECT * FROM tb_member_trigger;
ROLLBACK;	/* delete 전 시점으로 rollback */

UPDATE tb_member_trigger
   SET
     m_name='홍길동'
   WHERE
     m_id='id014';
COMMIT;		/* 변경사항 저장 */

SELECT * FROM tb_member_trigger;	/* 변경 된 테이블 조회*/

SELECT * FROM tb_member;
SAVEPOINT a;	/*변경 전 테이블 savepoint 지정*/
UPDATE tb_member SET m_name='홍002' WHERE m_id='id002';
SAVEPOINT b;	/* 변경 후 테이블 savepoint 지정*/
DELETE FROM tb_member;	
ROLLBACK TO SAVEPOINT b; /* delete 전 시점으로 rollback */

 

728x90

'{ "Hello World!" }; > DataBase' 카테고리의 다른 글

(DB) 트리거(Trigger)  (0) 2022.02.14
(DB) 프로시저, 함수  (0) 2022.02.14
(DB) eXERD 사용 방법  (0) 2022.01.26
(DB) 뷰(VIEW)  (0) 2022.01.26
(DB) 서브 쿼리(Sub Query)  (0) 2022.01.23