2025 년 7 월 17 일 : | 윈 토토 : 윈 토토 18 베타
이 문서는 지원되지 않는 버전의 토토 캔을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 사이트 추천 : 문서 : 17 : 3.4. 업무버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

3.4. 업무

거래는 기본입니다 모든 데이터베이스 시스템의 개념. a의 필수 지점 트랜잭션은 여러 단계를 단일로 묶는 것입니다. 전적으로 또는 전혀없는 작업. 중간 상태 단계는 다른 동시 거래에 보이지 않으며 거래를 방지하는 일부 실패가 발생합니다 완료 한 다음 단계가 데이터베이스에 영향을 미치지 않습니다. 모두.

예를 들어, 잔액이 포함 된 은행 데이터베이스를 고려하십시오 다양한 고객 계정 및 총 예금 잔고에 대해 가지를 위해. 우리가 $ 100.00의 지불을 기록하고 싶다고 가정합니다. Alice의 계정에서 Bob의 계정까지. 엄청나게 단순화, 이것에 대한 SQL 명령은 다음과 같습니다.

업데이트 계정 설정 밸런스 = 밸런스 -100.00
    여기서 이름 = 'Alice';
업데이트 브랜치 설정 밸런스 = 밸런스 -100.00
    여기서 name = (name = 'Alice')가있는 계정에서 branch_name을 선택하십시오);
계정 업데이트 설정 밸런스 = 밸런스 + 100.00
    여기서 이름 = 'bob';
업데이트 브랜치 설정 밸런스 = 밸런스 + 100.00
    여기서 name = (name = 'bob'); 계정에서 branch_name을 선택하십시오.

이 명령의 세부 사항은 여기서 중요하지 않습니다. 그만큼 중요한 점은 몇 가지 별도의 업데이트가 있다는 것입니다 이 간단한 작업을 수행하기 위해 관련이 있습니다. 우리 은행의 경찰관은이 모든 업데이트가 발생하거나 아무도 발생하지 않습니다. 확실히 a 시스템 실패는 Bob이 아닌 $ 100.00을받지 못했습니다. 앨리스로부터 차감. Alice Long은 행복한 고객으로 남아 있지 않습니다 그녀가 밥이 인정받지 않고 차감된다면. 우리는 필요합니다 무언가 잘못되면 작동, 지금까지 실행 된 단계 중 어느 것도 적용되지 않습니다. 업데이트를 A로 그룹화합니다거래우리 에게이 보증을 제공합니다. 거래는Atomic: 다른 관점에서 거래, 그것은 완전히 발생하거나 전혀 발생하지 않습니다.

일단 거래가 완료되면 보장을 원합니다. 데이터베이스 시스템에 의해 인정 된 것은 실제로 영구적으로 기록되며 충돌이 발생하더라도 손실되지 않습니다. 그 후 얼마 지나지 않아. 예를 들어, 우리가 현금을 기록하는 경우 Bob의 철수, 우리는 차변이 그의 계정은 그가 나온 직후 충돌로 사라질 것입니다. 은행 문. 트랜잭션 데이터베이스는 모든 것을 보장합니다 트랜잭션으로 작성된 업데이트는 영구 저장소에 로그인됩니다. (즉, 디스크에서) 거래가 완료되기 전에.

트랜잭션 데이터베이스의 또 다른 중요한 속성은 다음과 같습니다 원자 업데이트의 개념과 밀접한 관련이있는 경우 : 거래는 동시에 실행 중이며 각 거래는 그렇지 않아야합니다 다른 사람들이 불완전한 변화를 볼 수 있습니다. 예를 들어, 하나의 트랜잭션이 모든 지점 잔액을 총계로 바쁘면 Alice의 지점에서 차변을 포함시키기 위해서는 그렇지 않지만 밥의 지점에 대한 크레딧도 아니고 그 반대도 마찬가지입니다. 그래서 거래 영구적 인 관점에서만이거나 전혀 없어야합니다. 데이터베이스에 미치는 영향뿐만 아니라 가시성 측면에서도 그들은 일어난다. 공개 거래에 의해 지금까지 이루어진 업데이트는 다음과 같습니다. 거래가 완료 될 때까지 다른 거래에 보이지 않음 모든 업데이트가 동시에 보이게됩니다.

in토토 캔, 거래 트랜잭션의 SQL 명령을 |시작and커밋명령. 그래서 우리 은행 거래는 그럴 것입니다 실제로 :

시작;
계정 업데이트 설정 밸런스 = 밸런스 -100.00
    여기서 이름 = 'Alice';
등. 등
저지르다;

트랜잭션을 통해 파트 웨이 인 경우, 우리는 원하지 않는다고 결정합니다. 커밋하기 위해 (아마도 우리는 앨리스의 균형이 부정), 우리는 명령을 발행 할 수 있습니다롤백대신커밋그리고 지금까지 모든 업데이트가 될 것입니다 취소.

토토 캔실제로 취급합니다 거래 내에서 실행되는 모든 SQL 문. 만약에 당신은 a를 발행하지 않습니다.시작명령 각 개별 진술에는 암시 적시작및 (성공한 경우)커밋그 주위에 싸여 있습니다. 진술 그룹 둘러싸여시작and커밋가끔 a라고합니다.거래 블록.

참고 :일부 클라이언트 라이브러리 문제시작커밋자동으로 명령을 내리므로 묻지 않고 거래 블록. 문서를 확인하십시오 사용중인 인터페이스의 경우.

거래에서 진술을 제어 할 수 있습니다. 사용을 통한 더 세분화 된 패션SavePoints. 저장 포인트를 사용하면 선택적으로 할 수 있습니다 나머지를 커밋하면서 거래의 일부를 폐기하십시오. 로 SavePoint를 정의한 후SavePoint, 필요한 경우 롤백으로 롤백 할 수 있습니다 SavePoint with롤백으로. 모든 트랜잭션의 데이터베이스는 SavePoint 정의와 그것으로 롤백하는 것은 폐기되었지만 SavePoint가 유지됩니다.

SavePoint로 롤백 한 후에도 계속 정의됩니다. 따라서 여러 번 롤백 할 수 있습니다. 반대로, 당신이 있다면 물론 특정 저장 포인트로 다시 롤백 할 필요는 없습니다. 해제 할 수 있으므로 시스템은 일부 리소스를 자유롭게 할 수 있습니다. 유지하다 SavePoint로 롤백하거나 롤백하면 이후에 정의 된 모든 저장 포인트를 자동으로 해제합니다 그것.

이 모든 일은 트랜잭션 블록 내에서 일어나고 있으므로 다른 데이터베이스 세션에 볼 수 있습니다. 언제, 당신이 커밋하는 경우 거래 블록, 커밋 된 조치는 롤백 동작은 결코 다른 세션에 유닛을 보냅니다 전혀 눈에 띄게됩니다.

은행 데이터베이스를 기억하면서 우리가 $ 100.00을 차변한다고 가정합니다 Alice의 계정 및 Bob의 계정, 나중에 만 찾기 위해서만 Wally의 계정을 인정해야했습니다. 우리는 그것을 할 수 있습니다 다음과 같은 저장 포인트 사용 :

시작;
계정 업데이트 설정 밸런스 = 밸런스 -100.00
    여기서 이름 = 'Alice';
SavePoint My_SavePoint;
계정 업데이트 설정 밸런스 = 밸런스 + 100.00
    여기서 이름 = 'bob';
- 죄송합니다 ... 그것을 잊고 Wally의 계정을 사용하십시오
my_savepoint 로의 롤백;
계정 업데이트 설정 밸런스 = 밸런스 + 100.00
    여기서 이름 = '월리';
저지르다;

이 예제는 물론 지나치게 단순화되었지만 많이 있습니다. 사용을 통해 거래 블록을 통해 통제 할 수있는 제어 저장 포인트. 게다가,롤백으로is 배치 된 트랜잭션 블록의 제어를 회복하는 유일한 방법 오류로 인해 시스템에 의해 중단 된 상태, 롤링이 부족합니다. 완전히 다시 시작하고 다시 시작합니다.