回滚 rollback

  

  为了保证在应用程序、数据库或系统出现错误后,数据库能够被还原,以保证数据库的完整性,所以需要进行回滚。

  回滚(rollback)就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。

  回滚执行相反的操作,可以撤销错误的操作,从而保证数据的完整性。

  例如,用户A给用户B转账,在数据库中就需要给A与B的账户信息进行修改(update)操作,而这两条sql语句必须都执行或者都不执行。  例如先执行用户B的修改(update)语句,使用户B的账户金额增加了1000,然后执行用户A的update语句,使用户A的账户金额减少了1000。  如果用户A的账户金额大于1000,则交易顺利进行,不存在任何问题,但是当用户A的账户金额小于1000时,由于转账金额不允许大于账户金额,第二条sql语句语句就无法正确执行,此时,数据库的状态必须回到没有执行B的update语句之前,需要进行回滚操作,回滚就是执行一遍相反的操作,此时再执行B的update金额减1000。

  需要注意的回滚与撤销的区别。  回滚是指将数据库的状态恢复到执行事务之前的状态,其中可能会使用UNDO日志进行回滚。   撤销是一种记录日志的方式,并不是主要服务于事务回滚,而是主要用于系统从故障中恢复。  例如,系统突然断电,系统要根据UNDO日志对未完成的事务进行处理,保证数据库的状态为执行这些事务之前的状态。

时间: 2024-11-09 13:19:44

回滚 rollback的相关文章

6. Oracle 回滚(ROLLBACK)和撤销(UNDO)

转载自:http://blog.csdn.net/leshami/article/details/5731158 一.回滚(ROLLBACK)和撤销(UNDO) 回滚和前滚是保证Oracle数据库中的数据处于一致性状态的重要手段. --在9i版本以前 Oracle使用数据库中的回滚段来实现未提交数据或因系统故障导致实例崩溃时进行回滚操作 每一个表空间需要创建回滚段,各个表空间对回滚段实现各自的管理 --在9i及后续版本 提供了一种新的回滚数据的管理方式,即使用Oracle自动管理的撤销(Undo

Spring3声明式事务处理事务无法回滚rollback分析(annotation与xml配置混用)

新项目试运行,DBA提示生产数据库一个表的事务20分钟都未提交,分析过程如下: 1.查看日志log文件,最近20分钟是否有error日志: 2.发现某表有insert错误日志,初步判断由该表插入异常,并且未做rollback操作: 3.查看代码:该表的操作DAO.Service,事务处理为Spring的声明式事务处理,并控制到Service层: 4.场景还原: 打开Spring的debug日志(查看数据库conn打开.commit.rollback必须启用debug) 模拟插入异常数据 打断点测

带"回滚"功能的存储过程

Create PROC [ChangeDept] ( @FromUserID varchar(25), @ToDeptID int ) As Begin BEGIN TRANSACTION --开始事务 DECLARE @errorSun INT --定义错误计数器 SET @errorSun=0 --没错为0 declare @RoleID varchar(25) select @RoleID=RoleID from Role where RoleName='sales' update Emp

Mysql数据库InnoDB表和MyISAM表混用后,事务回滚测试。

测试环境CENTOS7.3+MYSQL5.7 一张表使用InnoDB引擎,表名称 innodb_test 另外一张表使用MyISAM引擎,表名称 innodb_test 在事务操作的时候,看看到底会发生什么情况. 表结构相同只有3个字段id,name, money+-------+---------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-----

回滚的意义---JDBC事务回滚探究

JDBC手动事务提交回滚的常见写法一直是rollback写在commit的catch之后: try{ conn.setAutoCommit(false); ps.executeUpdate(); ps.executeUpdate(); conn.commit(); }catch(Exception e){ conn.rollback(); } 但是,这种回滚是没有意义的: 一旦commit前出错, 就不提交了, 回滚无用 一旦commit了, 说明没错, 不用回滚 找到一篇和我观点相同的文章:

Spring中@Transactional事务回滚实例及源码

一.使用场景举例 在了解@Transactional怎么用之前我们必须要先知道@Transactional有什么用.下面举个栗子:比如一个部门里面有很多成员,这两者分别保存在部门表和成员表里面,在删除某个部门的时候,假设我们默认删除对应的成员.但是在执行的时候可能会出现这种情况,我们先删除部门,再删除成员,但是部门删除成功了,删除成员的时候出异常了.这时候我们希望如果成员删除失败了,之前删除的部门也取消删除.这种场景就可以使用@Transactional事物回滚. 二.checked异常和unc

上线代码、回滚代码

上线脚本 #!/bin/bash FWDIR="$(cd `dirname "${BASH_SOURCE-$0}"`; pwd)" bin=`dirname "$0"` bin=`cd "$bin"; pwd` now=`date "+%Y%m%d_%H%M%S"` tag_release=di.release.${now} [email protected]:bdp-server/bdp-di.git e

oracle undo回滚段详解

1.Undo是干嘛用的?   在介绍undo之前先说一下另外一个东西 transaction ,翻译成交易或事务.我们在进行一个事务的过程中需要申请许多资源,一个复杂的事务也需要很多步来完成.那么一个复杂的事务是只有两个结果,要么成功,要么失败(相当于从来没发生过). 一个很典型的列子,银行转账,其实其需要两步操作,第一步先将你账户上的钱减去,第二步把被转账户的钱加上,(先减后加,出了问题银行不吃亏.呵呵!)这样就是一个完整的事务.如果执行了一半,你的钱减了,被转账户的钱没加上,这个时候事务就要

数据库事务处理机制之事务回滚问题讨论

一.Sql中的事务 概念:事物是一种机制,是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.事务是一个不可分割的工作逻辑单元.在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.多用户登录系统适于使用事务机制. 属性:4大属性: a.原子性:事务时一个完整的操作.b.一致性:当事务完成时,数据库必须处于一致状态.c.隔离性:对数据进行修改的所有并发事务时彼此隔离的.d.持久性:事务完成后,它对于系统的影响是永久性的. 创建 (1)开始事务:begin t