关于设置事务回滚保存点的设置

下面用伪代码说明ingres数据库事务执行失败后全部回滚的实现过程 :

 

try
{

 savepoint(sp); //如果此处 保存点所依赖的transaction_handle事务句柄由connect()连接数据库时获取,则创建保存点成功,可以用rollback(sp)实现全部回滚;如果此时事务句柄为空,或者不是下面要执行事务的事务句柄,则此处savepoint(sp)创建保存点失败,要实现全部回滚必须用rollback(NULL);

  result=sql_query(A);//第一个查询语句A
if(result==failure)
  throw 1;
  savepoint(sp1); //第一个保存点sp1

 result= sql_query(B);
if(result==failure) throw 2;
  savepoint(sp2);

 result= sql_query(C);
if(result==failure) throw 3;

//提交事务
commit();

}
catch(int i)
{
  if(i==1)
{//全部回滚
 rollback(NULL); //参数为空时就可以全部回滚 ,这是因为如果自动提交事务关闭之后,在commit之前的所有query语句都在一个事务中
}
else if(i==2)
{
//部分回滚
   rollback(sp1); //回滚到sp1
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PostgreSQL(简称PG或pgsql)中,事务是数据库操作的一个逻辑单元,用于保证数据的一致性和完整性。如果事务中的某条或多条SQL语句执行失败或者用户决定放弃这些更改,可以使用回滚机制撤销这些操作,回到事务开始前的状态。以下是关于事务回滚的基本概念: 1. **事务开始**:使用`BEGIN`语句开始一个事务,这时数据库会将事务状态设置为未提交(uncommitted)。 2. **事务提交**:当所有操作都成功完成,使用`COMMIT`语句正式提交事务,所做更改被保存数据库中,事务状态变为已提交(committed)。 3. **事务回滚**:如果在事务过程中遇到错误或决定不执行后续操作,使用`ROLLBACK`语句会撤销自上一次`BEGIN`以来的所有更改,将事务状态恢复到开始前,就像这些操作从未执行过一样。 4. **自动回滚**:如果在一个事务中发生错误(如违反完整性约束),PostgreSQL也会自动回滚事务,而无需显式调用`ROLLBACK`。 5. **保存**:如果事务中存在多个操作,还可以使用`SAVEPOINT`语句创建一个保存,然后在需要的地方使用`ROLLBACK TO SAVEPOINT`回滚到特定的保存。 相关问题: 1. PostgreSQL支持哪些类型的回滚策略? 2. 如何在事务中设置隔离级别以影响回滚行为? 3. 事务中的`SAVEPOINT`有什么作用和使用场景? 4. 当一个事务需要回滚,系统如何保证数据的一致性?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值