거래는 기본입니다 모든 데이터베이스 시스템의 개념. 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라고 불립니다.트랜잭션 블록.
참고 :일부 클라이언트 라이브러리 문제시작and커밋자동으로 명령을 내리므로 묻지 않고 거래 블록. 문서를 확인하십시오 사용중인 인터페이스의 경우.