• oracle学习笔记7:pl/sql事务


    关于事务的举例,在之前有已经写过https://www.cnblogs.com/Zs-book1/p/10643516.html

    事务的四大基本特性:

    1.原子性:一系列的数据操作为一个整体,要么都执行,要么都不执行

    2.一致性:事务完成前后,数据要保持一致的状态

    3.隔离性:事务之间是相互独立的,隔离的

    4.持久性:事务对数据的操作是永久的

    事务的隔离级别:

    隔离级别不同会引发一些不好的现象:

    脏读:A事务正在执行,但是还没有提交,这是B事务读到了A事务过程中的事务

    幻读:A事务将id=1的数据进行修改id=2,这是B事务需要操作id=1的数据。

    重复读:A事务读取数据,B事务执行录入操作,这时A事务再次执行查询操作,读到的数据不一致

    设置隔离级别:

    1.未提交读:允许A事务读取B事务正在操作但是还没有提交的数据。

    2.已提交读:默认的隔离级别;A事务必须等B事务提交后才能读取数据。

    3.不可重复读:解决重复读的问题,A事务正在读取数据,不允许B事务操作数据。

    4.序列化:串行化,事务排队进行,操作效率低。

    在oracle中使用事务

    在mysql中,默认事务是关闭的,但是在oracle中,事务默认是开启的,需要显示的提交事务或者回滚。

    事务的操作命令:

    commit;--提交
    rollback ;--回滚
    savepoint ;--设置保存点

    事务控制语句:

    set autocommit on|off|immediate;--在sqlplus命令行中执行
    create table BANK
    (
      ID    NUMBER(7),
      NAME  VARCHAR2(20),
      MONEY NUMBER(7)
        check (money > 0)--添加约束,钱数必须大于0
    );
      --使用事务模拟转账业务
      declare
        begin
        update bank set money=money-1000 where name='zhangsan';
        update bank set money=money+1000 where name='lisi';
        commit;
        exception --当余额小于0时转账失败,回滚事务,不提交
        when others then
        rollback ;
      end;

    还可以使用savepoint设置保存点

    declare
      begin
      savepoint a; --设置保存点
      insert into bank values (3,'wanger',1000);
      savepoint b;
      insert into bank values (4,'zhao',1000);
      savepoint c;
      insert into bank values (5,'chen',1000);
      savepoint d;
      insert into bank values (6,'bai',1000);
    
      rollback to c;--回滚到保存点c
      commit ;--只提交保存点c之前的数据,保存点c之后的数据,回滚了,所以不提交
    end;
  • 相关阅读:
    文档视图
    引入缓冲池技术
    数据库访问与查询
    OnInitialUpdate函数
    显示股票视图的全局函数
    切换视图的核心代码
    GuiEdit的使用
    操作方法
    SQL 使用 解析
    调用API 实现 窗体 拖动
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11231772.html
Copyright © 2020-2023  润新知