본문 바로가기
Database/MSSQL

[MS] Transaction

by 나비와꽃기린 2016. 5. 19.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

**** 출처 URL*****

http://infodbbase.tistory.com/29

 

1. Transaction이란

하나의 논리적 작업 단위로 수행되는 일련의 작업을 뜻한다.

TransactionACID속성을 가져야 한다.

·        원자성(Atomicity) 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 트랜잭션은 모든 작업이 수행되거나 혹은 하나도 수행되지 않아야 한다.

·        일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. (DATA 무결성 유지)

·        고립성(Isolation) 트랜잭션을 수행 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다

·        지속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.

 

2. SP내부에 트랜잭션 적용

1) 예제1

CREATE PROCEDURE testSP

 @num int

AS

 BEGIN TRAN

UPDATE testSP SET num=@num

IF @@ERROR <>0

 BEGIN

  SELECT @@ERROR

  ROLLBACK’;

END

 COMMIT

GO

à SP에서 보면 트랜잭션 내부에 UPDATE문이 있고,

UPDATE구문 실행도중 ERROR 발생하면 @@ERROR반환 , 롤백을 하고

정상적으로 수행되었다면 UPDATE 끝나고 COMMIT 하게 됩니다.

 

2) 예제2

CREATE PROCEDURE testSP

 @num int

AS

 DECLARE @err int

SET @err=0;

 BEGIN TRAN

UPDATE testSP SET num=@num

SET @err=@@ERROR

IF @err <>0

 BEGIN

   ROLLBACK;

RETURN;

END

  INSERT INTO testable(num) VALUES(@num)

 SET @err=@@ERROR

IF @err <>0

 BEGIN

   ROLLBACK;

RETURN;

END

COMMIT

GO

à 트랜잭션 내부에 UPDATE, INSERT문이 삽입되어 있는 상태로

UPDATE문이 제대로 실행 INSERT문까지 실행되지만,

UPDATE 안에서 에러가 발생한다면 ROLLBACK하고 SP 중단하고,

INSERT 안에서 에러가 발생해도 INSERT,UPDATE 모두 중단하고 SP 빠져나오게된다. è 원자성 의미! (트랜잭션은 모든 작업이 수행되거나 혹은 하나도 수행되지 않아야 한다.)

 

2. 프로시저 삭제

DROP PROCEDURE <프로시저 명>;
GO

 

'Database > MSSQL' 카테고리의 다른 글

ORACLE/MSSQL 차이점  (0) 2016.05.19
procedure  (0) 2016.05.18