Oracle事务(transaction)详解


当前第2页 返回上一页

(5)共享行级排他锁(SRX锁) 
添加SRX锁。该锁定模式比行级排他锁和共享锁的级别都要高,这时不能对相同的表进行DML操作,也不能添加共享锁。

lock table in share row exclusive mode

上述几种锁模式中,RS锁是限制最少的锁,X锁是限制最多的锁。当程序对所做的修改进行提交(Commit)或回滚(Rollback)后,锁住的资源便会得到释放,从而允许其他用户进行操作。如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁。

下图列出产生锁定模式的SQL语句:

四、事务组成:

一条或者多条DML,[一条DDL]和一条DCL。

五、事务的分类:

1、显式事务:

  • 显式的调用DCL。
  • 只有用到COMMIT以后才会真正写入数据库,也持久化了。

2、隐式事务:

  • 如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)
  • 以下情况为自动提交: 
    1)正常执行完成的DDL语句:create、alter、drop 
    2)正常执行完场的DCL语句GRANT、REVOKE 
    3)正常退出的SQLPlus或者SQL Developer等客户端

六、事务控制命令

1、提交事务

在执行使用COMMIT语句可以提交事务,当执行了COMMIT语句后,会确认事务的变化,结束事务,删除保存点,释放锁。当使用COMMIT语句结束事务之后,其他会话将可以查看到事务变化后的新数据。

2、回滚事务

保存点(savepoint):是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点。当执行ROLLBACK时,通过指定保存点可以回退到指定的点。

设置保存点:

Savepoint a;

删除保存点:

Release Savepoint a;

回滚部分事务:

Rollback To a;

回滚全部事务:

Rollback;

七、示例

银行转帐的例子是最经典的事务示例:

-- 从账户一向账户二转账
DECLARE
    v_money     NUMBER(8, 2); -- 转账金额
    v_balance   account.balance%TYPE; -- 账户余额
BEGIN
    v_money := &转账金额; -- 输入转账金额
  -- 从账户一减钱  
    UPDATE account
    SET
        balance = balance - v_money WHERE     id = &转出账户  
        RETURNING balance INTO v_balance;

    IF SQL%notfound THEN
        raise_application_error(-20001, '没有该账户:' || &转出账户);
    END IF;

    IF v_balance < 0 THEN
        raise_application_error(-20002, '账户余额不足');
    END IF;

  -- 向账户二加钱
    UPDATE account
    SET        balance = balance + v_money    WHERE        id = &转入账户;

    IF SQL%notfound THEN
        raise_application_error(-20001, '没有该账户:' || &转入账户);
    END IF;

  -- 如果没有异常,则提交事务

    COMMIT;
    dbms_output.put_line('转账成功');
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK; -- 出现异常则回滚事务
        dbms_output.put_line('转账失败:');
        dbms_output.put_line(sqlerrm);
END;

到此这篇关于Oracle事务(transaction)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。


标签:Oracle

返回前面的内容

相关阅读 >>

oracle读取excel数据

navicat怎么连oracle

oracle怎么去重查询

oracle常用sql查询语句部分集合(图文)

浅析oracle体系结构

linux下oracle数据库用户创建方法详解

postgresql的now()与oracle的sysdate区别说明

oracle重建控制文件的实例教程

oracle区别adg与dg案例详解

oracle终极彻底卸载的完整步骤

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...