`
GloryRoad_Wang
  • 浏览: 7401 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

事务之COMMIT/ROLLBACK

阅读更多
数据库事务起始于SQL语句,终止于以下4种事件之一:1、COMMIT或ROLLBACK语句
2、DDL/DCL隐式提交 3、用户退出时自动提交 4、系统强行关闭时取消事务
事务结束后,下一条SQL语句将开始一个新的事务。

语句功能:
    COMMIT 结束当前事务,并将所有数据变更提交数据库生效
    SAVEPOINT  name 在当前事务内部创建一个保存点
    ROLLBACK  [TO  SAVEPOINT  name] ROLLBACK指令结束当前事务,并取消所有数据变   更。
    ROLLBACK TO SAVEPOINT name放弃该保存点,并取消所有在保存点之后的数据变更

隐式事务提交:
    一个事务在下列情况下会被自动提交:DDL语句 DCL语句;用户正常退出数据库,而缺少显式的COMMIT或者ROLLBACK.
   一个事务在下列情况下会被自动回退;用户异常退出数据库;系统强行关闭.

数据在COMMIT/ROLLBACK前的状态:
    事务中所有数据变更都会被临时存放在数据库的缓冲池中,直到事务被提交或者回退。因而事务中早先的状态是可以被恢复的。
    用户可以通过SELECT语句查询自己发起事务的数据变更,即使事务未被提交。但不能看到他人发起事务中未被提交的数据。
    用户发起事务中的变更数据将被数据库系统锁定。除该用户外,其他用户不能对锁定的数据进行变更操作,直到锁定的数据被提交或回退。

数据在COMMIT后的状态:
    数据变更在数据库中正式生效
    数据不可被还原
    所有用户可以看到变更数据
    数据锁将被释放,一度被锁定的数据重新可以被所有用户修改
    所有的保存点(savepoint)都被清除

数据在ROLLBACK后的状态:
    所有数据变更都取消,数据状态恢复到事务开始前
    数据锁将被释放,一度被锁定的数据重新可以被所有用户修改

回退到一个保存点:
    使用SAVEPOINT语句创建一个保存点。如果保存点名称已经存在,则新的保存点将覆盖旧的保存点。
    使用ROLLBACK  TO  SAVEPOINT语句回退到已有保存点状态

总结一下:
    1.没有提交(commit)的数据删除后无法rollback
    2.提交(commit)了的数据删除后可以使用rollback恢复
    3.删除数据后提交(commit)则无法使用rollback恢复
分享到:
评论

相关推荐

    SQL事务用法begin tran,commit tran和rollback tran的用法

    `BEGIN TRAN`、`COMMIT TRAN` 和 `ROLLBACK TRAN` 是SQL Server中用于管理事务的主要命令。下面将详细解释这些命令的用法和作用。 1. `BEGIN TRAN`: `BEGIN TRAN` 语句用于启动一个新的事务。当开始一个事务时,...

    事务管理的艺术:用BEGIN、COMMIT和ROLLBACK掌控数据库变更

    SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准编程语言。它被广泛用于访问和修改数据库中的数据...8. **事务控制(Transaction Control)**:使用`BEGIN`、`COMMIT`和`ROLL

    藏经阁-攻克痛点:如何保证复杂微服务架构下的数据一致性.pdf

    4. Branch Commit/Rollback:资源管理器根据事务管理器的指令提交或回滚分支事务。 Seata 的优点有: * 高效:Seata 使用异步处理机制,能够快速处理大量的事务请求。 * 可靠:Seata 使用两阶段提交机制,确保事务...

    分布式事务分类,xa,at,tcc,sega

    **提交/回滚阶段**(Commit/Rollback Phase):根据所有参与者的反馈,协调者决定提交或回滚事务。 **不足之处**: - **同步阻塞**:所有参与者在等待最终命令时处于阻塞状态。 - **单点故障**:协调者故障可能...

    基于Java+txlcn+seata的分布式事务实现案例源码.zip

    基于Java+txlcn+seata的分布式事务实现案例源码.zip ## txlcn 测试步骤 ### 准备工作 - 启动 MySQL Redis - 创建数据库 tx-manager txlcn-a txlcn-b txlcn-c - 在库 tx-manager 中执行 t_tx_exception.sql 创建...

    数据库文献

    SQL-Sever数据库根据运行模式将事务分为4种类型:自动提交事务、显示事务、隐式事务和批处理级...3. 隐式事务:是指在前一个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成;4. 批处理级事务

    数据库的事务处理方法

    例如,Oracle数据库中,事务从COMMIT、ROLLBACK、连接到数据库或执行第一条SQL语句开始,到COMMIT、ROLLBACK或断开连接结束。DDL语句会隐式地开始或结束事务。如果需要取消事务,可以使用ROLLBACK命令,甚至可以通过...

    sql事务和游标课件及题目

    - 提交或回滚事务(COMMIT/ROLLBACK):结束当前事务并应用或撤销更改。 接下来,我们来看SQL游标。游标允许在结果集上进行迭代处理,使得我们可以逐行读取、修改或移动数据。在编程中,这非常有用,尤其是在需要...

    在Titanium中通过使用BEGIN/COMMIT来加速SQLite插入操作

    1. 错误处理:事务处理中应包含错误捕获机制,如果在事务过程中发生错误,应使用ROLLBACK命令回滚事务,以保持数据库一致性。 2. 数据库连接管理:确保在完成所有操作后关闭数据库连接,以释放系统资源。 3. 优化SQL...

    seata分布式事务解决方案

    - **提交或回滚全局事务(Commit/rollback Global Transaction)**:TM根据业务结果决定全局事务的最终状态,向TC发送提交或回滚指令。TC协调所有RM执行相应操作,并更新全局事务状态。 4. **Seata-server** ...

    MyBatis 事务管理解析:颠覆你⼼中对事务的理解.pdf

    2.⼀说到事务,⼈们可能⼜会想起create、begin、commit、rollback、close、suspend。 可实际上,只有commit、rollback是实际存在的,剩下的create、begin、close、suspend都是虚幻的,是业务层或数据库底层 应⽤语意...

    oracle事务1.ppt

    * 控制事务的开始和结束:事务的开始可以通过执行DML语句来开始,事务的结束可以通过执行COMMIT或ROLLBACK语句来结束。 * 控制事务的隔离性:通过锁机制和并发控制机制来确保事务之间的隔离性。 * 控制事务的原子性...

    oracle事务.pptx

    * 事务开始于第一个 DML 语句的执行,结束于 COMMIT 或 ROLLBACK 语句、DDL 或 DCL 语句(自动提交)、用户会话正常结束或系统异常终了。 Commit 和 ROLLBACK 语句: * COMMIT 语句:事务提交命令。在 Oracle 中,...

    mySQL事务处理

    con.rollback(); // 若前面某条语句出现异常时,进行回滚,取消前面执行的所有操作 } catch (SQLException e1) { e1.printStackTrace(); } } finally { sm.close(); } } 通常都是上述的写法, 在mysql...

    SQLServer存储过程中事务的使用方法

    如果有任何错误,使用`ROLLBACK TRANSACTION`回滚事务,以保持数据的一致性。 ```sql if (@error <> 0) begin rollback transaction return -1 -- 操作结果错误标识 end else begin commit transaction ...

    mysql 事务处理学习资料+示例说明

    #### 示例1:使用BEGIN/COMMIT/ROLLBACK ```php $conn = mysql_connect('localhost', 'root', 'root') or die("连接失败!!!"); mysql_select_db('test', $conn); mysql_query("set names 'GBK'"); // 设置编码为GBK...

    数据库系统概论:第九章 数据库恢复技术.ppt

    事务可以通过显式定义(如使用BEGIN TRANSACTION和COMMIT/ROLLBACK语句)或隐式定义(由DBMS自动划分)来创建。COMMIT用于提交事务的所有更改,使其永久生效,而ROLLBACK则用于在事务遇到错误时撤销所有操作,以保持...

Global site tag (gtag.js) - Google Analytics