트랜잭션¶
트랜잭션의 실행¶
트랜잭션을 이용하여 쿼리를 실행하려면 $this->qb->transStart() 함수와 $this->qb->transComplete() 함수를 아래와 같이 사용합니다
$this->qb->transStart();
$this->qb->exec('AN SQL QUERY...');
$this->qb->exec('ANOTHER QUERY...');
$this->qb->exec('AND YET ANOTHER QUERY...');
$this->qb->transComplete();
start/complete 함수 사이에 원하는 수 만큼의 쿼리를 실행하면 전체의 성공 여부에 따라 함수들이 알아서 커밋 혹은 롤백을 수행합니다.
완벽모드¶
기본적으로 트랜잭션은 완벽모드(Strict Mode)에서 실행됩니다. 완벽모드가 활성화된 상태에서는 여러 그룹의 트랜잭션을 실행하더라도 단 하나라도 실패하면 전체가 쿼리가 롤백됩니다. 여러그룹의 트랜잭션을 실행했을 때 각각의 그룹이 독립적으로 실행되도록 하여 각 그룹내에서만 성공 여부에 따라서 커밋, 롤백을 하고 싶다면 완벽모드를 비활성화하면 됩니다.
완벽모드는 아래와 같은 방법으로 비활성화 시킬 수 있습니다
$this->qb->transStrict(FALSE);
에러 관리¶
트랜젹션 수행후 수동으로 에러 관리가 필요하다면 아래와 같이 합니다.
$this->qb->transStart();
$this->qb->exec('AN SQL QUERY...');
$this->qb->exec('ANOTHER QUERY...');
$this->qb->transComplete();
if ($this->qb->transStatus() === FALSE)
{
// 에러 관련 처리
}
테스트 모드¶
트랜잭션을 《test mode》 로 하면 쿼리는 정상적인 결과를 생성하더라도 모두 롤백됩니다. 테스트모드를 이용하려면, $this->qb->transStart() 함수의 첫 번째 파라미터를 TRUE로 하시면 됩니다.
$this->qb->transStart(TRUE); // Test mode
$this->qb->exec('AN SQL QUERY...');
$this->qb->transComplete();
트랜잭션 수동으로 수행¶
아래와 같은 방법으로 트랜잭션을 수동처리 할 수 있습니다:
$this->qb->transBegin();
$this->qb->exec('AN SQL QUERY...');
$this->qb->exec('ANOTHER QUERY...');
$this->qb->exec('AND YET ANOTHER QUERY...');
if ($this->qb->transStatus() === FALSE)
{
$this->qb->transRollback();
}
else
{
$this->qb->transCommit();
}
주석
수동 트랜잭션시에는 $this->qb->transBegin()
함수를 사용해야 합니다. $this->qb->transStart() 함수를 사용하지 않도록 주의하세요.