2010-04-21 1 views

답변

1

대부분의 dbs에서 각 명령문을 트랜잭션으로 만드는 자동 커밋 모드를 가질 수 있지만 트랜잭션에없는 항목은 롤백 할 수 없습니다.

그래서 원하는 것을 얻으려면 트랜잭션을 시작하고 필요한 처리를 수행 한 다음 시작으로 롤백하거나 커밋해야합니다.

2

자동 연결에 의존하며 각 연결마다 기본적으로 사용하지 않도록 설정되어 있습니다. MySql Manual

InnoDB에서 모든 사용자 활동은 트랜잭션 내에서 발생합니다. 자동 확약 모드가 사용 가능한 경우, 각 SQL.은 독자적으로 단일 트랜잭션을 형성합니다. 기본적으로 MySQL은 자동 연결이 활성화 된 상태에서 각각의 새 연결에 대한 세션을 시작하므로 MySQL은 각 명령문이 오류를 반환하지 않으면 커밋을 수행합니다. 명령문이 오류를 반환하면 커밋 또는 롤백 동작은 오류에 따라 다릅니다. Section 13.2.12, "InnoDB 오류 처리"를 보라.

자동 커밋이 활성화 된 세션은 명시 적 START TRANSACTION 또는 BEGIN 문으로 시작하고 COMMIT 또는 ROLLBACK 문을 사용하여 종료함으로써 다중 명령문 트랜잭션을 수행 할 수 있습니다.

SET autocommit = 0 인 세션에서 자동 커밋 모드를 사용할 수 없으면 세션에 항상 트랜잭션이 열려 있습니다. COMMIT 또는 ROLLBACK 문은 현재 트랜잭션을 종료하고 새 트랜잭션이 시작됩니다. 이 암시 적 커밋 자동 커밋이 활성화 된 경우

당신은 문을 롤백 할 수 없습니다.

2

일반적인 COMMIT 및 ROLLBACK 문 이외에도 InnoDB는 savepoints을 지원합니다. 세이브 포인트를 사용하면 트랜잭션 내에서 마지막 몇 개의 명령문 만 롤백 할 수 있습니다.