[MySQL] 트랜잭션(Transaction)
페이지 정보
작성자 서방님 댓글 0건 조회 114회 작성일 12-05-21 17:03본문
Transaction(트랜잭션)
- 한 단위의 일을 수행하는 일련의 SQL문이다.
- 쿼리 동작시 이상이 있을시 롤백할 수 있는 기능을 제공한다.
Transaction의 특징
- A (원자성) : 트랜잭션을 구성하는 모든 명령이 실행되거나 어떠한 명령도 실행되지 않아야 한다.
트랜잭션의 일부만을 수행할 수 없다. (데이터 손실이 일어날 수 있기 때문)
쿼리문이 모두 실행되거나 아니면 아예 안되던 둘 중 하나여야 한다는 뜻이다.
- C (일관성) : 트랜잭션이 끝난 후 DB는 일관성을 유지해야 한다. 쿼리 전 후의 데이터가 알맞아야 한다.
- I (독립성) : 모든 트랜잭션은 동시에 일어나는 다른 트랜잭션과 상관없이 DB에 일관된 뷰를 가지고 있다.
예) A가 현금 인출기에서 돈을 빼내는 동안 B는 현금 인출기 잔고를 볼 수 없도록 해야하거나
"트랜잭션 진행 중"이라는 메세지가 나와야 한다.(결과가 맞아야 하니까)
- D (지속성) : 트랜잭션이 끝난 후, DB는 데이터를 정확히 저장하고 정전이나 그 외의 이상 상황으로부터
데이터를 보호해야 한다. 보통 트랜잭션의 기록을 주 데이터베이스 외에 다른 위치의
데이터베이스에 저장하는 방식을 사용한다.
MySQL에서 트랜잭션을 수행하는 방법
- 저장 엔진(storage engine)을 사용해야 한다.
- 저장 엔진은 데이터베이스의 모든 데이터와 구조를 저장하는 하부 구조이다.
- 저장 엔진의 타입별로 트랜잭션을 허용하기도 하고 그렇지 않기도 한다.
* 저장 엔진이 트랜잭션을 지원하는 BDB이거나 InnoDB인지 확인해야 한다.
저장 엔진을 변경하는 방법
Alter Table your_table Type =InnoDB;
트랜잭션의 예
1) RollBack
Start Transaction;
Select * From piggy_bank;
Update piggy_bank set coin = 'Q' Where coin 'P';
Select * From piggy_bank; // 변경된 내용을 볼 수 잇다.
RollBack; // 롤백하면
select * From piggy_bank; // 변경되기 전 상태로 돌아간다.
2) Commit
Start transaction;
Select * From piggy_bank;
Update piggy_bank set coin = 'Q' Where coin 'P';
Select * From piggy_bank; // 변경된 내용을 볼 수 있다.
Commit; // 이제 변경을 되돌릴 수 없다.
Select * From piggy_bank; // 변경된 내용이 나온다.
- 한 단위의 일을 수행하는 일련의 SQL문이다.
- 쿼리 동작시 이상이 있을시 롤백할 수 있는 기능을 제공한다.
Transaction의 특징
- A (원자성) : 트랜잭션을 구성하는 모든 명령이 실행되거나 어떠한 명령도 실행되지 않아야 한다.
트랜잭션의 일부만을 수행할 수 없다. (데이터 손실이 일어날 수 있기 때문)
쿼리문이 모두 실행되거나 아니면 아예 안되던 둘 중 하나여야 한다는 뜻이다.
- C (일관성) : 트랜잭션이 끝난 후 DB는 일관성을 유지해야 한다. 쿼리 전 후의 데이터가 알맞아야 한다.
- I (독립성) : 모든 트랜잭션은 동시에 일어나는 다른 트랜잭션과 상관없이 DB에 일관된 뷰를 가지고 있다.
예) A가 현금 인출기에서 돈을 빼내는 동안 B는 현금 인출기 잔고를 볼 수 없도록 해야하거나
"트랜잭션 진행 중"이라는 메세지가 나와야 한다.(결과가 맞아야 하니까)
- D (지속성) : 트랜잭션이 끝난 후, DB는 데이터를 정확히 저장하고 정전이나 그 외의 이상 상황으로부터
데이터를 보호해야 한다. 보통 트랜잭션의 기록을 주 데이터베이스 외에 다른 위치의
데이터베이스에 저장하는 방식을 사용한다.
MySQL에서 트랜잭션을 수행하는 방법
- 저장 엔진(storage engine)을 사용해야 한다.
- 저장 엔진은 데이터베이스의 모든 데이터와 구조를 저장하는 하부 구조이다.
- 저장 엔진의 타입별로 트랜잭션을 허용하기도 하고 그렇지 않기도 한다.
* 저장 엔진이 트랜잭션을 지원하는 BDB이거나 InnoDB인지 확인해야 한다.
저장 엔진을 변경하는 방법
Alter Table your_table Type =InnoDB;
트랜잭션의 예
1) RollBack
Start Transaction;
Select * From piggy_bank;
Update piggy_bank set coin = 'Q' Where coin 'P';
Select * From piggy_bank; // 변경된 내용을 볼 수 잇다.
RollBack; // 롤백하면
select * From piggy_bank; // 변경되기 전 상태로 돌아간다.
2) Commit
Start transaction;
Select * From piggy_bank;
Update piggy_bank set coin = 'Q' Where coin 'P';
Select * From piggy_bank; // 변경된 내용을 볼 수 있다.
Commit; // 이제 변경을 되돌릴 수 없다.
Select * From piggy_bank; // 변경된 내용이 나온다.
댓글목록
등록된 댓글이 없습니다.