T-SQL-트랜잭션
ㅏ transaction데이터베이스에 대해 수행되는 작업 단위입니다. 트랜잭션은 사용자가 수동으로 수행하든 또는 일종의 데이터베이스 프로그램에 의해 자동으로 수행 되든 논리적 순서로 수행되는 작업 단위 또는 시퀀스입니다.
트랜잭션은 데이터베이스에 대한 하나 이상의 변경 사항을 전파하는 것입니다. 예를 들어 레코드를 만들거나 레코드를 업데이트하거나 테이블에서 레코드를 삭제하는 경우 테이블에서 트랜잭션을 수행하는 것입니다. 데이터 무결성을 보장하고 데이터베이스 오류를 처리하기 위해 트랜잭션을 제어하는 것이 중요합니다.
실제로 많은 SQL 쿼리를 그룹으로 묶고 트랜잭션의 일부로 모두 함께 실행합니다.
거래의 속성
트랜잭션은 일반적으로 ACID라는 약어로 참조되는 다음 네 가지 표준 속성을 가지고 있습니다.
Atomicity− 작업 단위 내의 모든 작업이 성공적으로 완료되었는지 확인합니다. 그렇지 않으면 트랜잭션이 실패 지점에서 중단되고 이전 작업이 이전 상태로 롤백됩니다.
Consistency − 성공적으로 커밋 된 트랜잭션시 데이터베이스가 상태를 적절하게 변경하는지 확인합니다.
Isolation − 트랜잭션이 서로 독립적이고 투명하게 작동 할 수 있습니다.
Durability − 시스템 장애시 커밋 된 트랜잭션의 결과 또는 효과가 지속되도록합니다.
거래 통제
트랜잭션을 제어하는 데 사용되는 다음 명령이 있습니다.
COMMIT − 변경 사항을 저장합니다.
ROLLBACK − 변경 사항을 롤백합니다.
SAVEPOINT − ROLLBACK 할 트랜잭션 그룹 내에서 포인트를 생성합니다.
SET TRANSACTION − 거래에 이름을 붙입니다.
트랜잭션 제어 명령은 DML 명령 INSERT, UPDATE 및 DELETE에만 사용됩니다. 이러한 작업은 데이터베이스에서 자동으로 커밋되기 때문에 테이블을 생성하거나 삭제하는 동안에는 사용할 수 없습니다.
MS SQL Server에서 트랜잭션 제어 명령을 사용하려면 'begin tran'으로 트랜잭션을 시작하거나 트랜잭션 명령을 시작해야합니다. 그렇지 않으면 이러한 명령이 작동하지 않습니다.
COMMIT 명령
COMMIT 명령은 트랜잭션에 의해 호출 된 변경 사항을 데이터베이스에 저장하는 데 사용되는 트랜잭션 명령입니다. 이 명령은 마지막 COMMIT 또는 ROLLBACK 명령 이후 모든 트랜잭션을 데이터베이스에 저장합니다.
통사론
다음은 COMMIT 명령 구문입니다.
COMMIT;
예
다음 레코드가있는 CUSTOMERS 테이블을 고려하십시오.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
다음 명령 예제는 age = 25 인 테이블에서 레코드를 삭제 한 다음 데이터베이스에서 변경 사항을 커밋합니다.
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25
COMMIT
결과적으로 테이블의 두 행이 삭제되고 SELECT 문은 다음과 같은 출력을 생성합니다.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
3 kaushik 23 Kota 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
ROLLBACK 명령
ROLLBACK 명령은 데이터베이스에 아직 저장되지 않은 트랜잭션을 실행 취소하는 데 사용되는 트랜잭션 명령입니다. 이 명령은 마지막 COMMIT 또는 ROLLBACK 명령이 발행 된 이후 트랜잭션을 실행 취소하는 데만 사용할 수 있습니다.
통사론
다음은 ROLLBACK 명령 구문입니다.
ROLLBACK
예
다음 레코드가있는 CUSTOMERS 테이블을 고려하십시오.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
다음 명령 예제는 age = 25 인 테이블에서 레코드를 삭제 한 다음 데이터베이스의 변경 사항을 ROLLBACK합니다.
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK
결과적으로 삭제 작업은 테이블에 영향을주지 않으며 SELECT 문은 다음과 같은 결과를 생성합니다.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
SAVEPOINT 명령
SAVEPOINT는 전체 트랜잭션을 롤백하지 않고 특정 지점으로 트랜잭션을 롤백 할 수있는 트랜잭션의 지점입니다.
통사론
다음은 SAVEPOINT 명령 구문입니다.
SAVE TRANSACTION SAVEPOINT_NAME
이 명령은 트랜잭션 문 사이에서 SAVEPOINT를 만드는 경우에만 사용됩니다. ROLLBACK 명령은 트랜잭션 그룹을 실행 취소하는 데 사용됩니다.
다음은 SAVEPOINT로 롤백하는 구문입니다.
ROLLBACK TO SAVEPOINT_NAME
다음 예에서는 CUSTOMERS 테이블에서 세 가지 다른 레코드를 삭제합니다. 삭제할 때마다 SAVEPOINT를 만들어야하므로 언제든지 SAVEPOINT로 ROLLBACK하여 적절한 데이터를 원래 상태로 되돌릴 수 있습니다.
예
다음 레코드가있는 CUSTOMERS 테이블을 고려하십시오.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
다음은 일련의 작업입니다-
Begin Tran
SAVE Transaction SP1
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 1
1 row deleted.
SAVE Transaction SP2
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 2
1 row deleted.
SAVE Transaction SP3
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 3
1 row deleted.
세 번의 삭제가 발생했지만 마음이 바뀌었고 SP2로 식별 된 SAVEPOINT로 롤백하기로 결정했습니다. SP2는 첫 번째 삭제 후 생성되었으므로 마지막 두 삭제는 취소됩니다.
ROLLBACK Transaction SP2
Rollback complete.
SP2로 롤백 한 이후 첫 번째 삭제 만 발생했습니다.
SELECT * FROM CUSTOMERS
6 개 행이 선택되었습니다.
ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
SET TRANSACTION 명령
SET TRANSACTION 명령을 사용하여 데이터베이스 트랜잭션을 시작할 수 있습니다. 이 명령은 다음 트랜잭션의 특성을 지정하는 데 사용됩니다.
통사론
다음은 SET TRANSACTION의 구문입니다.
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>