`
阿Q乱七八糟
  • 浏览: 9977 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

关于数据库操作回滚的问题

 
阅读更多

     前些天在Q群里有为群友问有两个对mysql数据库的操作,一个是对某张表的数据进行删除,另一个是对另一张表的删除,两个操作加入到同一事务中,如果数据删除这步出错,事务是否会回滚?即对于表的删除会不会失效?

     我当时对这个问题不是很确定,只知道DML会回滚,DDL不确定。自己编写了个小实例验证了下,结果显示:对于表的删除操作(DDL),事务不会回滚。

     查了下资料,现有如下总结:

     DDL:数据库定义语言,如DROP、ALTER、CREATE等等。

     DML:数据库操纵语言,SQL中处理数据等操作统称为数据操纵语言。如SELECT、SAVE、DELETE、 UPDATE等。

     DCL:数据控制语言,用来授予或回收访问数据库的某种特权,并控制 数据库操纵事务发生的时间及效果,对数据库实行监视等。如GRANT,COMMIT,ROLLBACK等。

     因为不同的操作隐含着不同的数据提交方式,下面说一下提交数据的方式:

     ①显式提交: COMMIT 命令直接完成的提交为显式提交。

     ②隐式提交:   SQL 命令间接完成的提交为隐式提交。以下命令都是隐性提交的: ALTER  AUDIT  COMMENT  CONNECT  CREATE  DISCONNECT  DROP  EXIT  GRANT NOAUDIT  QUIT  REVOKE  RENAME 

     ③自动提交:若把 AUTOCOMMIT 设置为 ON ,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。

     所有的 DML 语句都是要显式提交的,即要在执行完DML语句之后,执行 COMMIT 。而其他的诸如 DDL 语句的,都是隐式提交的。也就是说,在运行那些非 DML 语句后,数据库已经进行了隐式提交,例如 CREATE TABLE,在运行脚本后,表已经建好了,并不在需要你再进行显式提交。所以非DML操作是不能回滚的。

     DML 语句,执行完之后,要处理的数据都会放在回滚段中(除了 SELECT 语句),等待用户进行提交(COMMIT)或者回滚 (ROLLBACK),当用户执行 COMMIT / ROLLBACK后,放在回滚段中的数据就会被删除。OMMIT / ROLLBACK 都是用在执行 DML语句之后的。这也就是为什么DML语句可以回滚的原因了。而SELECT 语句执行后,数据都存在共享池。提供给其他人查询相同的数据时,直接在共享池中提取,不用再去数据库中提取,提高了数据查询的速度。

分享到:
评论

相关推荐

    java 数据库操作,事务回滚

    java 应用程序操作数据库实例,若出现sql异常则事务回滚。

    有关数据库事务回滚机制实例

    主要是在实际开发中运用到对数据库的操作同步进行,几个操作相关性的问题。 回滚了就说明事务有个判断,阻止SQL的自动提交,添加认为控制

    新建Oracle数据库回滚段具体操作过程

    本文简要阐述了新建Oracle数据库回滚段具体操作过程,并且介绍了具体的操作过程和步骤。

    黑月ADODB数据库操作类1.32版易语言模块源码

    源码通过创建ADODB.Connection对象实现了ADODB数据库操作。@易语言源码。

    数据库试验,关于事务的创建撤销,事务的回滚等基本操作练习

    数据库试验,关于事务的操作。关于事务的创建撤销,事务的回滚等基本操作练习。

    MySQL数据库误操作后快速回滚的方法

    主要介绍了MySQL数据库误操作后快速回滚的方法的相关资料,需要的朋友可以参考下

    access数据库操作实例

    一个比较简单实用的数据库操作实例,事务处理。从数据库的开始事务,保存事务和回滚事务,。使用方法:。在操作数据库前,建立一个开始事务,。在操作数据库最容易出错的地方,加上判断,如果成功,就不用回滚了,如果失败则...

    跨多个数据库操作,同时连接两个一上的数据库,用事物关联起来

    跨多个数据库操作,同时连接两个一上的数据库,用事物关联起来,JTA,两个一上数据库连接,连接两个数据库,两个数据库可以同时操作,同时回滚。。。。同时提交。。

    c#对2个表中的数据同时进行操作,数据错误,数据回滚

    c#对2个表中的数据同时进行操作,数据错误,数据回滚 即对table1插入数据对table2插入数据 如果对table2操作出现错误 那么对table1已做的操作要回滚(放弃)

    MySQL数据库操作MFC封装类

    MySQL数据库操作MFC封装类,增加了事务处理及回滚。在实际项目使用。CSQLConnection封装数据库的连接,CSQLResult封装记录集的操作。

    数据库系统恢复技术综述

    如果任何类似的事务的已经在数据库中反映,这一定是颠倒的,并且数据库必须回滚。 使用这种日志重新应用的技术,数据库系统可以避免宕机所带来的已接受事务(应用已确认执行完毕的事务)的丢失。数据修复时,那些在...

    db如何快速回滚+恢复

    保证数据的安全性是DBA第一要务: (0)理论上可以恢复+跑路; (1)全量备份+增量备份+定期演练; (2)1小时延时从库; (3)双份1小时延时从库+提高资源利用率;

    简单的c#事务回滚实例代码

    执行多条SQL语句对数据库进行操作,如果某个SQL语句执行中出错,那么要对之前的操作进行回滚,代码比较简单。

    Java Spring 事务回滚详解

    spring 事务回滚 1、遇到的问题  当我们一个方法里面有多个数据库保存操作的时候... 正常情况:前面的数据库操作会被执行,而发生数据库操作错误开始及之后的所有的数据保存操作都将失败。这样子应该都不是我们要的

    Spring+Mybatis整合事务回滚

    花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...

    易语言数据库操作支持类模块

    易语言数据库操作支持类模块源码,数据库操作支持类模块,连接,连接Access,连接SQLServer,关闭,执行SQL,取得权限,设置权限,设超时时间,取超时时间,开始事务,保存事务,回滚事务,最后错误,是否已连接,对象提供者,引擎...

    1数据库设计文档.doc

    数据库回滚段配置 10 1.2.11. 数据库临时段表空间配置 11 1.2.12. 数据库系统表空间配置 11 1.3. 数据库表空间设计原则 11 1.3.1. 表空间大小定义原则 11 1.3.2. 表空间扩展性设计原则 12 1.4. 裸设备的使用 12 2. ...

    基于 RMI 技术的数据库操作中间件设计学生、教师消费记录管理系统【100011197】

    ①数据库操作中间件: 提供数据库连接接口。该接口可使“数据库操作中间件”连接当前主流的数据库,如Oracle、SQLServer、MySQL、Access 等;参数要求:指示数据库类型,数据库相应的连接参数。 提供关闭数据库连接...

Global site tag (gtag.js) - Google Analytics