msyql 本身不支持事务嵌套的,但是可以按照嵌套事务的思路变相实现事务多层嵌套。
开启事务时 先mark一个标志,每嵌套一次,就将该值加1,但是开启事务这个操作只在mark=1时才真的去实现,其他只是累加。
而提交时,肯定是从最内层开始提交,每提交一次,mark减去1,直到mark=1时,才真的去实现提交。
回滚也是如此。
public function beginTransaction() {
++$this->transactions;
if ($this->transactions==1){
$this->pdo->beginTransaction();
}
}
public function rollBack() {
if ($this->transactions ==1) {
$this->transactions ==0;
$this->pdo->rollBack();
} else {
--$this->transactions;
}
}
public function commit() {
if ($this->transactions ==1){
$this->pdo->commit();
}
--$this->transactions;
}