: 하나의 논리적인 작업단위로 여러 명렁의 묶음(INSERT
, DELETE
, UPDATE
명령들의 묶음)
트랜잭션은 작업의 한 단위입니다. 트랜잭션이 성공하면 트랜잭션 동안 이루어진 모든 데이터 수정은 커밋되고 데이터베이스의 영구적인 부분이 됩니다. 트랜잭션에 오류가 발생하여 취소되거나 롤백되면 모든 데이터 수정은 지워집니다.
https://docs.microsoft.com/ko-kr/sql/t-sql/language-elements/transactions-transact-sql?view=sql-server-ver16
BEGIN TRANSACTION -- 자동으로 sql server 에서 붙인다.
UPDATE ccc SET ADDRESS = '경기도 시흥'
WHERE id = 'aaa';
COMMIT TRANSACTION -- 자동으로 sql server 에서 붙인다.
BEGIN TRANSACTION -- 사용자가 명시
UPDATE ccc SET ADDRESS = '경기도 시흥' WHERE id = 'aaa';
UPDATE ccc SET ADDRESS = '경기도 광주' WHERE id = 'bbb';
UPDATE ccc SET ADDRESS = '경기도 용인 ' WHERE id = 'ddd';
COMMIT TRANSACTION -- 사용자가 명시
SELECT *
FROM ccc;
mdf
파일의 변화는 없이ldf
파일만 수정한다.
CREATE TABLE ccc2 (
number INT
);
insert ccc2 values(10);
insert ccc2 values(20);
insert ccc2 values(30);
BEGIN TRAN
UPDATE ccc2 SET number = 100 WHERE number = 10;
UPDATE ccc2 SET number = 200 WHERE number = 20;
UPDATE ccc2 SET number = 300 WHERE number = 30;
COMMIT TRAN
SELECT *
FROM ccc2;
Dirty page로 메모리(Cash)에 존재하는 데이터를 보여주기 때문에
TRAN
이 적용되어 있다.
SELECT @@trancount;
:현재 실행중인 트랜잭션의 갯수를 알아보기위한 함수, @@trancount
TRANSACTION
중일 경우에는 해당 테이블에 Lock을 발생시켜 다른 사용자가 접근 할 수 없게 된다.
USE tempDB;
ALTER DATABASE sampleDB SET ALLOW_SNAPSHOT_ISOLATION ON;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
COMMIT TRAN
: 트랜잭션의 이름을 지정해서 commit 을 시킬 수 있다.COMMIT WORK
: 현재 실행중인 트랜잭션 중에서 가장 가까운 트랜잭션만을 커밋 시킨다.ROLLBACK TRAN
: 트랜잭션을 취소SAVE TRAN
: 트랜잭션의 내용이 길경우 중간에 위치를 지정해서 그 지점까지의 저장 할 수 있다.BEGIN TRAN SQL 명령... COMMIT TRAN(=COMMIT WORK)
설정방법
: SET IMPLICIT TRANSACTION ON
암시적 트랜잭션이 한번이 수행되면, COMMIT 이나 ROLLBACK 명령이 수행되기 전까지는 암시적 트랜잭션이 중복되어 시작되지 않는다.
강의: ms sql 2014 제대로 배우기 2