logo

SQL 트랜잭션

트랜잭션은 일련의 작업을 단일 실행 단위로 그룹화합니다. 각 트랜잭션은 특정 작업으로 시작하고 그룹의 모든 작업이 성공적으로 완료되면 종료됩니다. 작업 중 하나라도 실패하면 트랜잭션이 실패합니다. 따라서 트랜잭션에는 두 가지 결과만 있습니다. 성공 또는 실패 .

A 계좌에서 B 계좌로 150달러를 이체하는 거래의 예:

1. read(A) 2. A:= A – 150 3. write(A) 4. read(B) 5. B:= B + 150 6. write(B)>

불완전한 단계로 인해 트랜잭션이 실패합니다. 데이터베이스 트랜잭션은 정의에 따라 원자성, 일관성, 격리성 및 내구성을 갖춰야 합니다.
이들은 대중적으로 다음과 같이 알려져 있습니다. 속성. 이러한 속성은 충돌 없이 여러 트랜잭션의 동시 실행을 보장할 수 있습니다.



거래의 속성

  • 원자성: 거래의 결과는 완전히 성공할 수도 있고 완전히 실패할 수도 있습니다. 트랜잭션 중 한 부분이 실패하면 전체 트랜잭션을 롤백해야 합니다.
  • 일관성: 트랜잭션은 데이터베이스를 하나의 유효한 상태에서 다른 유효한 상태로 이동하여 무결성 제한을 유지합니다.
  • 격리: 동시 트랜잭션은 서로 격리되어 데이터의 정확성을 보장합니다.
  • 내구성: 트랜잭션이 커밋되면 시스템 오류가 발생하더라도 수정 사항이 그대로 유지됩니다.

SQL을 사용하여 트랜잭션 제어 명령을 구현하는 방법은 무엇입니까?

다음 명령은 트랜잭션을 제어하는 ​​데 사용됩니다. 이러한 문은 테이블을 생성하는 동안 사용할 수 없으며 다음과 같은 DML 명령에만 사용된다는 점에 유의하는 것이 중요합니다. 끼워 넣다 , 업데이트 , 그리고 삭제 .

BEGIN TRANSACTION 명령

명시적 또는 로컬 트랜잭션의 시작점을 나타냅니다.

통사론:

거래 시작 transaction_name ;

SET TRANSACTION 명령

트랜잭션 격리 수준 및 액세스 모드와 같은 현재 트랜잭션의 속성 값은 MySQL의 SET TRANSACTION 문을 사용하여 설정됩니다.

통사론:

트랜잭션 설정 [ 읽기 쓰기 | 읽기 전용 ];

COMMIT 명령

단일 트랜잭션 내의 모든 명령문과 모든 것이 순서대로 이루어지면 모든 변경 사항이 데이터베이스에 함께 기록됩니다. 헌신적인 . COMMIT 명령은 마지막 COMMIT 또는 ROLLBACK 명령 이후의 모든 트랜잭션을 데이터베이스에 저장합니다.

통사론:

저지르다;

예:

샘플 표1

산출

산출

다음은 테이블에서 age = 20인 레코드를 삭제한 다음 데이터베이스에서 변경 사항을 COMMIT하는 예입니다.

질문

DELETE FROM Student WHERE AGE = 20; COMMIT;>

산출

따라서 테이블에서 두 행이 삭제되고 SELECT 문은 다음과 같습니다.

산출

산출

ROLLBACK 명령

SQL 그룹화된 명령문에서 오류가 발생하면 모든 변경 사항을 중단해야 합니다. 변경 사항을 되돌리는 프로세스를 호출합니다. 롤백 . 이 명령은 마지막 COMMIT 또는 ROLLBACK 명령이 실행된 이후 트랜잭션을 실행 취소하는 데에만 사용할 수 있습니다.

ROLLBACK 명령 구문:

롤백;

예:

위의 예에서 샘플 테이블1 ,
테이블에서 age = 20인 레코드를 삭제한 다음 데이터베이스의 변경 사항을 ROLLBACK합니다.

질문

DELETE FROM Student WHERE AGE = 20; ROLLBACK;>

산출

산출

산출

SAVEPOINT 명령

세이브포인트 ROLLBACK할 트랜잭션 그룹 내에 지점을 생성합니다.
SAVEPOINT는 전체 트랜잭션을 롤백하지 않고도 트랜잭션을 특정 지점으로 롤백할 수 있는 트랜잭션의 지점입니다.

저장점 명령 구문:

SAVEPOINT SAVEPOINT_NAME;

이 명령어는 모든 트랜잭션 중 SAVEPOINT 생성에만 사용됩니다.
일반적으로 ROLLBACK은 트랜잭션 그룹을 실행 취소하는 데 사용됩니다.

컬렉션 자바

Savepoint 명령으로 롤백하기 위한 구문:

SAVEPOINT_NAME으로 롤백합니다.

언제든지 SAVEPOINT로 ROLLBACK하여 적절한 데이터를 원래 상태로 되돌릴 수 있습니다.

예:

위의 예에서 샘플 테이블1 , 테이블에서 연령 = 20인 레코드를 삭제한 다음 저장점을 유지하여 데이터베이스의 변경 사항을 ROLLBACK합니다.

질문

SAVEPOINT SP1; //Savepoint created. DELETE FROM Student WHERE AGE = 20; //deleted SAVEPOINT SP2; //Savepoint created.>

여기서 SP1은 삭제 전에 생성된 첫 번째 SAVEPOINT입니다. 이 예에서는 삭제가 한 번 발생했습니다.
다시 삭제하면 SAVEPOINT SP2가 생성됩니다.

산출

산출

산출

삭제가 이루어졌습니다. 마음이 바뀌어 삭제 전 SP1로 식별한 SAVEPOINT로 ROLLBACK하기로 결정했다고 가정해 보겠습니다.
이 문으로 삭제가 취소됩니다.

질문

ROLLBACK TO SP1; //Rollback completed>

산출

산출

산출

RELEASE SAVEPOINT 명령

이 명령은 생성한 SAVEPOINT를 제거하는 데 사용됩니다.

통사론:

SAVEPOINT SAVEPOINT_NAME 해제

SAVEPOINT가 해제되면 더 이상 ROLLBACK 명령을 사용하여 마지막 SAVEPOINT 이후 수행된 트랜잭션을 실행 취소할 수 없습니다.
이는 데이터베이스 트랜잭션을 시작하는 데 사용되며 이후 트랜잭션의 특성을 지정하는 데 사용됩니다.

결론

  • SQL 문은 트랜잭션을 사용하여 그룹화됩니다.
  • 그들은 모든 변경이 이루어지거나 전혀 변경되지 않을 것이라고 약속합니다.
  • 원자성, 일관성, 격리성 및 내구성이라는 ACID 품질을 통해 신뢰성이 보장됩니다.
  • BEGIN TRANSACTION으로 트랜잭션을 시작하고 COMMIT 또는 ROLLBACK으로 완료하여 변경 사항을 완료하거나 실행 취소합니다.