2011-12-08 2 views
1

PDO 트랜잭션을 사용할 경우 테이블을 잠글 필요가 있습니까?PDO 거래가 있습니까?

사용자 a가 50의 돈을 갖고 50을 사용자 b에게 이전하면 PDO 거래가 모두 오류없이 실행됩니까? 또한

경우 문

if ($user['money'] > 500) { 
    $dbc ->beginTransaction(); 
    ......... 
    $dbc ->commit(); 
} 

처럼 어떻게, 쿼리를 실행하지 않아야 의미를 변경하지 않는 사용자의 돈의 값이 트랜잭션이 실행되는 동안 보장 할 수 있다면 나는이 말을 ?? 감사합니다.

답변

1

SQL 서버는 트랜잭션 프로세스를 보장합니다. beginTransaction()이 성공하고 commit()이 성공하고 SQL 서버와 테이블이 트랜잭션을 지원하면 확실하게 알 수 있습니다.

1

PDO는 추상화 계층이므로 데이터베이스에 따라 다릅니다. MySQL은 트랜잭션을 지원하지만, InnoDB 테이블에 대해서만 트랜잭션을 지원한다. 그렇지 않으면 테이블 잠금 만 사용합니다 (동일하지 않음). SQLite는 항상 트랜잭션을 지원합니다. 또 다른 데이터베이스는 절대로 없을 수도 있습니다.

트랜잭션은 여전히 ​​개발자 (개발자)가 논리를 작성하고 검증해야합니다. 데이터베이스는 무엇이 옳은지 (단지 정확하지 않고) 무엇이 잘못되었는지 (부정확 한)를 알지 못합니다. 그렇게 할 때 BEGIN과 COMMIT/ROLLBACK을 호출하는 스크립트를 만들어야합니다.

또한 주목할 가치가 있습니다 : 데이터베이스 오류 후 트랜잭션이 자동으로 ROLLBACK 처리되지 않습니다. (어떤 데이터베이스 나 DBAL이하는 일이긴하지만, 표준이 아니기 때문에 의문을 가지면 안된다.) 즉, 모든 쿼리의 결과/응답/피드백을 확인하고 적절하게 행동해야한다는 것을 의미한다 (예 : ROLLBACK 호출).

관련 문제