oracle-事务

作者: 小小蒜头 | 来源:发表于2017-08-21 22:46 被阅读33次

    什么是事务?

    一个不可分割的子操作形成一个整体,该整体要么全部执行成功,要么全部执行失败。例如:转账(a用户余额5000,b用户余额5000,a给b转1000,那么a和b要执行更新,a-1000,b+1000,某一个更新出错,那就是整体都出错了)。

    为什么要用事务?

    如果不用事务的话,以转账为例,可能出现一个用户钱增加了,另一个用户钱不变。

    oracle的事务只针对DML操作。

    Oracle的提交事务

    (1)显示提交:commit
    (2)隐藏提交:DDL/DCL/exit(sqlplus工具)
    注意:提交是的从事务开始(Oracle的事务开始:第一条DML操作做为事务开始)到事务提交中间的内容,提交到ORCL数据库中的DBF二进制文件

    Oracle的回滚事务

    (1)显示回滚:rollback
    (2)隐藏回滚:关闭窗口(sqlplus工具),死机,掉电

    注意:回滚到事务开始的地方

    什么是回滚点?

    在操作之间设置的一个标志位,用于将来回滚之用

    为什么要设置回滚点?

    02_设置回滚点的好处.jpg

    savepoint a; rollback to savepoint a;

    如果没有设置回滚点的话,Oracle必须回滚到事务开始的地方,其间做的一个正确的操作也将撤销

    使用savepoint 回滚点,设置回滚点a

    savepoint a;

    使用rollback to savepoint,回滚到回滚点a处,a之后的操作都无效了。

    rollback to savepoint a;

    Oracle提交或回滚后,原来设置的回滚点还有效吗?

    原回滚点无效了

    Oracle之所以能回滚的原因是?

    主要机制是实例池

    Oracle支持的二种事务隔离级别及能够解决的问题

    Oracle支持:read committed 和 serializable

    Oracle中设置事务隔离级别为serializable

    set transaction isolation level serializable;

    演示二个用户同时操作emp表,删除KING这条记录,会有什么后果?

    因为有隔离级别的存在,所以不会出现二个用户都删除了KING这条记录,一定是一个用户删除KING成功,在该用户没有提交的情况下,另一个用户等待。

    隔离 没有提交

    开了两个命令窗口,上面的先进行删除命令,执行后显示已删除1行,下面的窗口执行删除命令在等待过程中。

    上面的窗口提交后,下面窗口的删除命令才会执行。因为有隔离级别,两个窗口执行删除命令才不会抢着删。

    提交后

    相关文章

      网友评论

        本文标题:oracle-事务

        本文链接:https://www.haomeiwen.com/subject/knwfdxtx.html