• PL/SQL 事务


    目录

    开始事务

    结束事务

    提交事务

    回滚事务

    自动事务控制


            数据库事务是由一个或多个相关SQL语句组成的原子工作单元。它被称为原子操作,因为构成事务的SQL语句带来的数据库修改可以共同提交,即永久化到数据库或从数据库回滚(撤销)。成功执行的SQL语句和提交的事务不一样,即使成功执行SQL语句,除非提交包含语句的事务,否则可以回滚该语句,并且可以撤消语句所做的所有更改。

    开始事务

            当发生下列事件之一时,事务即开始:

    • 连接到数据库后执行第一个SQL语句。
    • 在事务完成后发出的每个新的SQL语句。

    结束事务

            当发生下列事件之一时,事务即结束:

    • 发出了COMMIT或ROLLBACK语句。
    • 发出DDL语句,例如:CREATE TABLE语句;因为在这种情况下,自动执行COMMIT。
    • 发布DCL语句,如:GRANT声明;因为在这种情况下,自动执行COMMIT。
    • 用户从数据库断开连接。
    • 用户通过发出EXIT命令从SQL * PLUS退出,COMMIT自动执行。
    • SQL * Plus异常终止,会自动执行ROLLBACK。
    • DML语句失败;在这种情况下,会自动执行ROLLBACK来撤消该DML语句。

    提交事务

            通过发出SQL命令COMMIT将事务永久化。COMMIT命令的一般语法是:

    COMMIT;

    例如:

    1. INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    2. VALUES (6, 'Komal', 22, 'MP', 4500.00 );
    3. COMMIT;

    回滚事务

            使用ROLLBACK命令可以撤销对不带COMMIT的数据库所做的更改。ROLLBACK命令的一般语法是:

    ROLLBACK [TO SAVEPOINT ];

            当事务由于某种前所未有的情况而中止,如系统故障时,自提交以来整个事务被自动回滚。如果不使用保存点(savepoint),那么只需使用以下语句来回滚所有更改。

    ROLLBACK; 

    保存点(Savepoints)

            保存点(Savepoints)是有助于通过设置一些检查点将长事务拆分成更小的单元的标记。通过在长事务中设置保存点,如果需要,可以回滚到检查点。这是通过发出SAVEPOINT命令完成的。SAVEPOINT命令的一般语法是:

    SAVEPOINT ;

     例如:

    1. INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    2. VALUES (7, 'Rajnish', 27, 'HP', 9500.00 );
    3. INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    4. VALUES (8, 'Riddhi', 21, 'WB', 4500.00 );
    5. SAVEPOINT sav1; -- 设置保存点
    6. UPDATE CUSTOMERS
    7. SET SALARY = SALARY + 1000;
    8. ROLLBACK TO sav1; -- 此语句回滚直到保存点sav1的所有更改。之后,所做新的改变将重新开始。
    9. UPDATE CUSTOMERS
    10. SET SALARY = SALARY + 1000
    11. WHERE ID = 7;
    12. UPDATE CUSTOMERS
    13. SET SALARY = SALARY + 1000
    14. WHERE ID = 8;
    15. COMMIT;

    自动事务控制

            要在执行INSERT,UPDATE或DELETE命令时自动执行COMMIT,可以将AUTOCOMMIT环境变量设置为自动提交,如:

    SET AUTOCOMMIT ON;

    也可以使用以下命令关闭事务自动提交模式:

    SET AUTOCOMMIT OFF;
  • 相关阅读:
    二十三种设计模式全面解析-从线程安全到创新应用:探索享元模式的进阶之路
    [[机缘参悟-89]:什么是平台?国家、公司、家庭、硬件、软件、应用?
    Java入门------数组
    LeetCode322:零钱兑换
    WebRTC初识
    作为编程的我们,针对我们的职业,初入职场要如何规划呢?
    激进还是放缓?明凌晨美联储公布新一轮加息路径
    践行绿色发展秸秆综合利用太仓模式 国稻种芯现代饲料规划
    数字IC前端笔试常见大题整理(简答+手撕)
    翻译英语的软件-免费翻译软件-各种语言互相翻译
  • 原文地址:https://blog.csdn.net/weixin_42051619/article/details/125990941