`
阿Q乱七八糟
  • 浏览: 10445 次
  • 性别: 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异常则事务回滚。

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

    例如,在执行一系列操作时如果某个步骤失败,通过回滚可以确保整个事务被撤销,防止数据库处于不稳定或不一致的状态。 ### 五、总结 通过对上述代码的分析可以看出,事务回滚机制是数据库管理中非常重要的一个环节...

    ORACLE数据库的回滚段.pdf

    回滚段,正如其名,是用来存放事务处理过程中增、删、改数据的历史信息,确保在事务回滚或数据库恢复时能正确操作。在Oracle 8i Release 8.1.7版本中,默认创建了24个回滚段,但它们初始大小较小,可能不足以应对...

    Oracle数据库中回滚监视的深入探讨

    `USERNAME`、`SQL_ID`和`SQL_ADDRESS`等字段则提供了与回滚事务关联的SQL语句的详细信息,这对于诊断问题和优化性能至关重要。 此外,`CONTEXT`列可能表示会话的上下文信息,`MESSAGE`列提供了有关操作的附加描述,...

    ORACLE数据库的回滚段[参照].pdf

    在实际应用中,根据系统负载和事务特性,管理员需要监控和调整回滚段的大小和数量,以保证数据库性能并防止由于回滚段不足导致的问题。 总结起来,回滚段是Oracle数据库管理系统中关键的组件,它负责存储事务的撤销...

    对Oracle数据库回滚日志的清理

    - **性能下降**:过大的回滚日志文件会增加I/O操作,进而降低数据库响应速度。 - **备份和恢复时间延长**:更大的数据文件意味着备份和恢复过程所需的时间也会相应增加。 ### 清理Oracle数据库回滚日志的方法 在...

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

    在IT行业中,数据库操作是软件开发中的重要环节,尤其是在易语言这样的编程环境中。"黑月ADODB数据库操作类1.32版易语言模块源码" 提供了一种使用ADODB(ActiveX Data Objects Database)接口来处理数据库的解决方案...

    oracle数据库回滚段专题解析

    一旦表空间重新上线,Oracle会从系统回滚段中提取相应的回滚信息来完成事务的回滚操作。 #### 回滚段的使用 - **分配回滚段**:事务开始时,Oracle会为该事务分配一个回滚段。通常会选择拥有最少事务的回滚段进行...

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

    在.NET框架中,C#语言提供了对事务处理的强大支持,特别是在数据库操作中,事务回滚是确保数据一致性的重要机制。本实例将详细讲解如何在C#中实现简单的事务回滚功能,以应对在执行多条SQL语句时可能出现的错误。 ...

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

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

    导入Excel到数据库的完整案例,带数据校验/事务回滚

    总结来说,这个案例提供了一套完整的Excel导入流程,从读取Excel、数据校验、数据库操作到错误处理和日志记录,覆盖了数据导入过程中的关键环节。通过学习和应用这个案例,开发者可以构建出高效且可靠的Excel数据...

    一个回滚段清理的实例

    其中,部分回滚段处于OFFLINE状态,这通常意味着这些回滚段无法被正常使用,可能是由于错误或者维护操作导致的。 2. **回滚段大小的检查**: 另一个SQL查询用于查看回滚段的当前大小,状态以及它们所在的文件。...

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

    事务是一组数据库操作,这些操作作为一个单元被执行,要么全部成功,要么全部失败。这四个特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)——合称为ACID属性,是...

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

    MySQL数据库在日常操作中,有时会因误操作导致数据丢失或错误,此时快速回滚到误操作前的状态显得尤为重要。本篇文章将详细讲解如何在MySQL数据库误操作后进行快速回滚,以确保数据的安全。 首先,MySQL的二进制...

    批量导入Excel数据到数据库,带数据校验/事务回滚

    当开启一个新的`TransactionScope`时,所有的数据库操作都会被包含在这个事务中。如果所有操作都成功,调用`Complete`方法提交事务;如果有任何异常,事务会自动回滚,保护了数据库的完整性。 数据校验是保证数据...

    Qt sqlite 数据库操作封装

    在IT领域,数据库操作是应用程序开发中的核心环节,尤其是在桌面应用和嵌入式系统中。Qt框架提供了一个强大的工具集,使得开发者可以方便地利用SQLite数据库进行数据存储和管理。本篇文章将深入探讨如何在QT5.14.2...

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

    事务是一组数据库操作,这些操作被视为单个逻辑工作单元。如果事务中的所有操作都成功完成,那么事务就提交;如果有任何操作失败,整个事务将被回滚,这样可以确保数据库状态的一致性。在C#中,我们可以使用ADO.NET...

    db如何快速回滚+恢复

    本文将从理论出发,结合实际案例,详细阐述数据库如何进行快速回滚及恢复的操作方法,并针对不同场景给出合理的解决方案。 #### 一、理论基础与常见问题 在数据库管理中,数据误删或误改是常见的问题之一。这些...

    易语言DB数据库操作例子

    5. **错误处理**:在进行数据库操作时,可能会遇到各种错误,如网络问题、权限不足或SQL语法错误等。易语言提供了错误处理机制,可以捕获并处理这些错误。通常,我们需要在执行可能出错的代码块前后设置错误捕获和...

    跨多个数据库操作,同时连接多个的数据库,同时操作

    这通常涉及到跨数据库操作和分布式事务处理,确保数据的一致性和完整性。以下是一些关于这个主题的重要知识点: 1. **JTA(Java Transaction API)**:JTA是Java平台中用于处理分布式事务的标准API。它允许应用程序...

Global site tag (gtag.js) - Google Analytics