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,是无法回退的。

  • 相关阅读:
    Poj 1742 Coins(多重背包)
    Poj 2350 Above Average(精度控制)
    求二进制数中1的个数
    Poj 1659 Distance on Chessboard(国际象棋的走子规则)
    Poj 2411 Mondriaan's Dream(压缩矩阵DP)
    Poj 2136 Vertical Histogram(打印垂直直方图)
    Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
    poj 2390 Bank Interest(计算本利和)
    Poj 2533 Longest Ordered Subsequence(LIS)
    Poj 1887 Testing the CATCHER(LIS)
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12716309.html
Copyright © 2011-2022 走看看