我正在使用 php 和 postgres 进行增删改查,我想知道如果出现错误是否有办法回滚事务。 实际上,如果我在事务中遇到错误,id(主键)会增加,然后我会丢失一个 id 以供将来使用。
我该如何预防?我的意思是,如果 Insert 的查询失败,请不要在表中进行自动递增。
我正在使用一个类来执行查询:
public function insertRecord ($data){
$campos =$this->getTableFields();
$data =implode ("', '", $data);
$sql ="INSERT INTO {$this->table} ($campos) VALUES (";
$sysData =$this->getDefaultValues();
if($sysData){
$sysData .= ",";
$sql .="$sysData ";
}
$sql .="'$data') RETURNING {$this->campoId};";
echo $sql;
pg_query($this->linkid,$sql);
return $this->validateOperation();
}
最佳答案
事务被回滚。但它仍然会用完序列中的一个数字,自动递增值基于该序列。这是设计使然,可防止持久锁定,这会降低并行执行性能。
有一些解决方法:
关于PHP - Postgresql 如果返回错误,我如何回滚查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42737177/