logo

SQL 트랜잭션

SQL 트랜잭션은 하나 이상의 SQL 작업의 시퀀스입니다(예:INSERT UPDATE DELETE) 단일 작업 단위로 실행됩니다. 트랜잭션은 모든 작업이 성공하거나 데이터 무결성을 유지하면서 적용되지 않도록 합니다.

SQL 트랜잭션의 주요 속성: ACID

SQL 트랜잭션의 무결성은 안정적인 데이터베이스 트랜잭션을 보장하는 ACID 속성에 의해 관리됩니다. 이 네 가지 속성은 함께 작동하여 데이터베이스의 일관성과 신뢰성을 보장합니다.

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

SQL 트랜잭션 제어 명령

SQL 트랜잭션 제어 명령에서 데이터베이스 트랜잭션의 무결성과 신뢰성을 보장하는 SQL 작업 실행. 이러한 명령은 데이터베이스 변경 사항의 시작 커밋 및 롤백을 관리하는 데 도움이 됩니다. 다음은 SQL의 주요 트랜잭션 제어 명령에 대한 구문과 예제를 설명합니다.



1. BEGIN TRANSACTION 명령

그만큼BEGIN TRANSACTION명령은 새 트랜잭션의 시작을 표시합니다. 이 명령을 따르는 모든 SQL 문은 다음과 같은 트랜잭션이 발생할 때까지 동일한 트랜잭션의 일부가 됩니다.COMMIT 또는 ROLLBACK 발생합니다. 이 명령은 데이터베이스를 변경하지 않고 단지 트랜잭션을 시작합니다.

통사론:

BEGIN TRANSACTION transaction_name ;

은행 이체 시나리오를 사용한 SQL 트랜잭션의 예

두 계좌 간 은행 송금의 예를 살펴보겠습니다. 이 예에서는 단일 트랜잭션에서 여러 쿼리를 사용하는 방법을 보여줍니다.

BEGIN TRANSACTION;  

-- Deduct 0 from Account A
UPDATE Accounts
SET Balance = Balance - 150
WHERE AccountID = 'A';

-- Add 0 to Account B
UPDATE Accounts
SET Balance = Balance + 150
WHERE AccountID = 'B';

-- Commit the transaction if both operations succeed
COMMIT;

제품에 문제가 있는 등의 오류가 발생한 경우UPDATE사용할 수 있는 쿼리ROLLBACK거래 중에 발생한 모든 변경 사항을 취소하려면 다음을 수행하세요.

ROLLBACK;

이렇게 하면 한 계좌에서 돈을 추가하지 않고 다른 계좌에서 차감하는 등 시스템이 일관성 없는 상태로 끝나지 않게 됩니다.

BEGIN TRANSACTION TransferFunds;

2. 커밋 명령

그만큼COMMIT명령은 현재 트랜잭션 중에 이루어진 모든 변경 사항을 데이터베이스에 저장하는 데 사용됩니다. 트랜잭션이 커밋되면 변경 사항은 영구적입니다. 

통사론:

COMMIT;

샘플은 다음과 같습니다.Student이 예에서 작업을 수행하는 데 사용될 테이블입니다. 이 테이블에는 ID 이름, 나이, 기타 관련 정보 등 기본적인 학생 세부 정보가 포함되어 있으며 다양한 방법으로 조작할 수 있습니다. 트랜잭션 제어 명령.

산출' title=학생 테이블

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

DELETE FROM Student WHERE AGE = 20;  
COMMIT;

산출

산출' loading='lazy' title=산출

3. 롤백 명령

그만큼ROLLBACK명령은 현재 트랜잭션의 모든 변경 사항을 취소하는 데 사용됩니다. 오류가 발생하거나 원하는 변경을 완료할 수 없는 경우에 사용됩니다. 데이터베이스는 이전 상태로 되돌아갑니다. BEGIN TRANSACTION 처형됐다.

통사론:

ROLLBACK;

테이블에서 age = 20인 레코드를 삭제한 다음 데이터베이스의 변경 사항을 ROLLBACK합니다. 이 경우에는 DELETE 작업이 취소되고 데이터베이스 변경 사항이 저장되지 않습니다.

컬렉션 자바
DELETE FROM Student WHERE AGE = 20;  
ROLLBACK;

산출:

산출' loading='lazy' title=산출

4. SAVEPOINT 명령

에이SAVEPOINT을 생성하는 데 사용됩니다 검문소 거래 내에서. 특정 위치로 롤백할 수 있습니다.SAVEPOINT전체 트랜잭션을 롤백하는 대신. 이를 통해 우리는 거래의 일부를 취소할 수 있습니다. 전체 거래.

통사론:

SAVEPOINT SAVEPOINT_NAME;

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

산출:

산출' loading='lazy' title=산출

설명:

위의 예 샘플 테이블1에서 테이블에서 연령 = 20인 레코드를 삭제한 다음 저장점을 유지하여 데이터베이스의 변경 사항을 롤백합니다. 여기서 SP1은 삭제 전에 생성된 첫 번째 SAVEPOINT입니다. 이 예에서는 하나의 삭제가 발생했습니다. 다시 삭제하면 SAVEPOINT SP2가 생성됩니다. 

5. 세이브포인트로 롤백

그만큼ROLLBACK TO SAVEPOINT명령을 사용하면 트랜잭션을 특정 저장 지점으로 롤백하여 해당 지점 이후에 이루어진 변경 사항을 효과적으로 취소할 수 있습니다.

통사론:

ROLLBACK TO SAVEPOINT SAVEPOINT_NAME;

삭제가 발생했습니다. 마음이 바뀌어 삭제 전 SP1로 식별된 SAVEPOINT로 ROLLBACK하기로 결정했다고 가정하겠습니다. 따라서 이 경우에는DELETE작업이 취소되고 트랜잭션이 원래 상태로 돌아갑니다.SP1저장점.

ROLLBACK TO SP1;  
//Rollback completed

산출:

산출' loading='lazy' title=산출

6. RELEASE SAVEPOINT 명령

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

통사론:  

RELEASE SAVEPOINT SAVEPOINT_NAME;

일단 세이브포인트SP2출시되면 더 이상 롤백할 수 없습니다.

RELEASE SAVEPOINT SP2; -- Release the second savepoint.

은행에서 거래를 사용하는 이유는 무엇입니까?

이 경우 거래가 없으면 한 계좌에서 돈이 공제되지만 다른 계좌에는 추가되지 않아 시스템이 일관되지 않은 상태가 되는 시나리오가 발생할 위험이 있습니다. 트랜잭션은 두 작업이 함께 성공하거나 실패하도록 보장하여 이러한 문제를 방지합니다.

SQL 트랜잭션 유형

트랜잭션의 성격과 수행하는 특정 작업에 따라 다양한 유형의 트랜잭션이 있습니다.

  • 거래 읽기 : 일반적으로 데이터를 읽는 데에만 사용됩니다. SELECT 쿼리.
  • 트랜잭션 쓰기 : 여기에는 데이터베이스의 데이터를 수정하는 작업이 포함됩니다. INSERT UPDATE또는DELETE운영.
  • 분산 트랜잭션 : 이러한 트랜잭션은 여러 데이터베이스에 걸쳐 있으며 데이터베이스 간의 일관성을 보장합니다.
  • 암시적 트랜잭션 : 특정 작업을 위해 SQL Server에서 자동으로 시작됩니다.
  • 명시적 거래 : 사용자가 다음을 사용하여 트랜잭션을 시작하고 종료하는 수동으로 제어되는 트랜잭션BEGIN TRANSACTION COMMIT그리고ROLLBACK.

SQL 트랜잭션 모니터링 및 최적화

성능을 유지하고 문제를 방지하려면 다음 기술을 고려하십시오.

1. 모니터 잠금 장치 : 잠금 동작을 추적하고 쿼리를 조정하여 잠금 충돌을 최소화합니다.

2. 거래 범위 제한 : 처리 속도를 높이기 위해 트랜잭션의 영향을 받는 행 또는 레코드 수를 제한합니다.

3. 일괄 처리 사용 : 많은 양의 데이터를 처리하는 경우 작업을 더 작은 트랜잭션이나 배치로 나누어 시스템에 부담을 주지 않도록 하세요.

추천 퀴즈 퀴즈 편집 질문 5개

다음 중 ACID의 '격리' 속성 위반을 가장 잘 설명하는 시나리오는 무엇입니까?

  • 에이

    트랜잭션으로 인해 데이터베이스가 기본 키 제약 조건을 위반하는 상태가 됩니다.

  • 동시에 실행되는 두 개의 트랜잭션이 동일한 데이터를 읽고 쓰면 일관되지 않은 결과가 발생합니다.

  • 기음

    사용자가 기록을 성공적으로 업데이트했지만 시스템 충돌로 인해 변경 사항이 지워졌습니다.

  • 트랜잭션이 중간에 실패하고 모든 변경 사항이 되돌려집니다.

설명:

이는 한 트랜잭션의 중간 상태가 다른 트랜잭션에 표시되는 격리 위반의 전형적인 예입니다.

은행 애플리케이션에서 자금 이체에는 한 계좌에서 인출하고 다른 계좌에 입금하는 작업이 포함됩니다. 두 작업이 모두 완료되거나 둘 다 완료되지 않도록 보장하는 ACID 속성은 무엇입니까?

  • 에이

    격리

  • 원자성

  • 기음

    내구성

  • 일관성

설명:

원자성은 트랜잭션 내의 모든 작업이 성공적으로 완료되도록 보장합니다. 그렇지 않으면 전체 트랜잭션이 롤백됩니다.

트랜잭션이 실행되고 'COMMIT'이 발행됩니다. 정전이 발생한 직후. 시스템이 다시 시작된 후에도 트랜잭션에 의한 변경 사항이 계속 존재함을 보장하는 ACID 속성은 무엇입니까?

  • 에이

    일관성

  • 원자성

  • 기음

    내구성

  • 격리

설명:

내구성은 일단 트랜잭션이 커밋되면 정전이나 시스템 충돌이 발생하는 경우에도 트랜잭션이 그대로 유지되도록 보장하는 속성입니다.

트랜잭션에서 'SAVEPOINT' 명령의 주요 목적은 무엇입니까?

  • 에이

    트랜잭션의 일부를 커밋합니다.

  • 나중에 롤백할 수 있는 트랜잭션 지점을 표시합니다.

  • 기음

    거래 상태를 영구적으로 저장합니다.

  • 거래를 종료하고 모든 변경 사항을 영구적으로 적용합니다.

설명:

'SAVEPOINT'는 트랜잭션 내에서 부분 롤백을 허용합니다.

다음 트랜잭션을 고려하십시오. 'START TRANSACTION; 삽입 ...; 세이브포인트 A; 업데이트 ...; 세이브포인트 B; 삭제 ...; 저장점 A로 롤백;' 'ROLLBACK' 명령 이후의 트랜잭션 상태는 무엇입니까?

  • 에이

    전체 트랜잭션이 롤백됩니다.

  • 'DELETE'만 취소됩니다.

  • 기음

    가장 최근 저장점이 아닌 저장점으로 롤백할 수 없기 때문에 오류가 발생합니다.

  • 'INSERT'는 저장되었지만 'UPDATE' 및 'DELETE'는 실행 취소되었습니다.

설명:

'SAVEPOINT A'로 롤백하면 해당 저장점 이후에 이루어진 'UPDATE' 및 'DELETE' 변경 사항이 모두 취소됩니다.

SQL 트랜잭션퀴즈가 성공적으로 완료되었습니다. 귀하의 점수:  2/5정확성 : 0%설명을 보려면 로그인하세요 1/5 1/5 < Previous 다음 >