PHP - Postgresql 如果返回错误,我如何回滚查询?

标签 php postgresql auto-increment

我正在使用 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/

相关文章:

mysql - 如何将尽可能多的值插入到另一个表中,因为它是在其他表的特定列中定义的

MySQL insert on duplicate key update PK AI

PHPEXCEL 如何在有特殊字符的情况下获取单元格值

sql - 使用 objection.js 或 knex.js 在 postgres 中的字符串列的 json 数组中查询

php - 将 2 个 Select 语句与不同的 Where 子句连接在一起并在 While 循环中使用

sql - 如何选择任意行的相邻行(在 sql 或 postgresql 中)?

mysql。同一个表中重复的自增键

php - 根据相应行使用递增值进行更新

javascript - 跨语言界面——它们存在吗?

php - 验证后返回带有焦点的空字段