zoukankan      html  css  js  c++  java
  • 【Oracle11g】15_事务

    1.什么是事务?

    事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。
    事务是一个不可分割的工作逻辑单元。

    例如:银行转账过程就是一个事务。它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据。

    2.事务的特性(ACID)

    2.1 原子性

    原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。

    2.2 一致性

    一致性(Consistency):当事务完成时,数据必须处于一致状态
    案例说明

    -- 建表
    create table student(sno number,sname varchar2(100),sage number);
    insert into student values(1,'Mike',11);
    insert into student values(2,'John',22);
    insert into student values(3,'Tom',33);
    insert into student values(4,'Logan',44);
    commit;
    

    在窗口1中进行数据的更新,然后新打开窗口2,查询出来的数据为更新后的数据,这个例子就说明了数据库的一致性。

    一致性读
    例如:现在表student非常的大,执行select * from student where sno=4 这条记录需要半小时,那么假如10:00我执行这条命令,我在等待数据执行的时候,10:20另外一个用户执行了update student set sage=66 where sno=4;commit; 到10:30的时候第一条select 语句才返回查询结果,那么返回的记录中sage是修改前的还是修改后的呢?
    答案是:修改前的,undo段里保留了修改前的数据

    2.3 隔离性

    隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务

    我们先在窗口1中修改sno=4的记录,不提交的情况下,在窗口2中修改sno=4的记录,此时我们会发现,在窗口2中被hang住了。当我们在窗口1中执行commit的时候,窗口2也会自动执行update

    2.4 永久性

    永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

    永久性表示数据一旦被更新提交后,就会永久保存在数据库中,直到下次更新。

    3.事务的命令

    Oracle11g中的事务相关的命令:commit savepoint rollback
    Sql*plus中,设置是否自动提交:set autocommit on|off

    3.1 savepoint案例演示

    
    SQL> create table cust_info(id number,name varchar2(10));
    
    表已创建。
    
    SQL> insert into cust_info values(1,'aa');
    
    已创建 1 行。
    
    SQL> savepoint mark1;
    
    保存点已创建。
    
    SQL> update cust_info set name='bb';
    
    已更新 1 行。
    
    SQL> savepoint mark2;
    
    保存点已创建。
    
    SQL> delete from cust_info;
    
    已删除 1 行。
    
    SQL> savepoint mark3;
    
    保存点已创建。
    
    SQL> insert into cust_info values(1,'cc');
    
    已创建 1 行。
    
    SQL> select * from cust_info;
    
            ID NAME
    ---------- ----------
             1 cc
    
    SQL> rollback to savepoint mark2;
    
    回退已完成。
    
    SQL> select * from cust_info;
    
            ID NAME
    ---------- ----------
             1 bb
    
    SQL>  rollback to savepoint mark3;
     rollback to savepoint mark3
    *
    第 1 行出现错误:
    ORA-01086: 从未在此会话中创建保存点 'MARK3' 或者该保存点无效
    

    上述案例中,从上往下依次设立了mark1、mark2、mark3三个事务点,但是如果回退到mark2,则再想回退到mrak3,是无法回退的。

  • 相关阅读:
    webpack打包代码生成npm包和js文件学习记录
    王道每周工作记录
    20211116 nuxt项目移动端网页修复记录
    ubuntuwireshark打开出现错误的问题
    Python3基础使用RSA2(SHA256WithRSA)签名加密作为sign值的问题
    博客成长志
    OI学习日志 12月份
    docker 运行.net镜像服务运行正常但是连接不上sqlserver数据库解决方案
    国外一位Orchard的blog
    mvc 相关联的下拉列表 cascading dropdownlist
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12716309.html
Copyright © 2011-2022 走看看