• 【Oracle】事务处理


    名词解释

    DML:Data Manipulation Language (数据库操纵语言) 例如:DELETE、INSERT、UPDATE、SELECT

    DDL:Data Definition Language(数据库定义语言) 例如:CREATE、ALTER、DROP、

    DCL: Data Control Language (数据库控制语言) 例如:GRANT、REVOKE、DENY

    1.按照组成方式

    Oracle数据库的事务可以有以下几种组成方式:

    • 一个或多个DML
    • 一个DCL语句
    • 一个DDL语句

    2.事务按照启动方式

    • 显示事务

              Oracle 11g中事务是隐式自动开始的,它不需要用户显示的执行开始事务语句

    • 隐性事务

          打开隐性事务设置开关后,执行下一条SQL语句的时候自动启动一个新事务,并且每关闭一个事务时,下一条SQL语句又自动启动一个新事务,直到关闭了隐性事务的设置开关。

    • 自动提交事务

          此处是SQL Server默认模式。当一条有效的SQL语句执行后,成功了便自动提交,如果失败了,那么将自动回滚并返回错误信息。

    改变事务的模式只影响当前数据库连接,不影响其他连接中的事务

    Oracle事务结束

    当下列事件发生的时候结束:

    • 用户执行了COMMIT语句(提交)
    • 用户执行了ROLLBACK语句(回滚)
    • 用户执行了DDL语句(自动提交)
    • 用户执行了DCL语句(自动提交)
    • 用户正常退出SQL*Plus(自动提交)
    • 用户非正常退出SQL*Plus(自动回滚)
    • 系统奔溃,包括硬件或软件故障(自动回滚)

    事务的并发控制

    1.丢失更新

    个人理解:我们一起修改,谁也不管谁

    当两个或多个事务选择同一行,然后基于最初选定的值更新改行时,会发生丢失更新问题。

    例如:

    A与B同时在修改电子文档,当A提前修改完毕提交后,B修改完提交则会覆盖A修改的内容,这就造成了丢失更新,如果是等待A修改完毕,B才可以得到文档再修改,则会避免这种问题。

    2.未确认的相关性(脏读)

    个人理解:我还在改,你就复制我还没改好的东西

    如果一个事务读取了另外一个事务尚未提交的更新,则称为脏读。

    例如:

    A复制了B的电子文档,但是此时B还在修改电子文档,此时A获取到的电子文档就与B修改后的电子文档不一致了。如果B等A修改完成后再复制,那么将不会出现这种情况。

    3.不一致的分析(不可重复读)

    个人理解:没有互相通知,你改你的,我读我的,第一次读对的,第二次读,变化好大

    当事务多次访问同一行数据,并且每次读取的数据不同时,将会发生不一致分析的问题。不一致的分析与未确认的相关性类似,因为其他事务也在更改该数据。

    例如:

    A两次读取B的文档,第一次读取未修改,但是在A第二次读取的时候,B觉得文档需要优化,对文档进行了修改,当A第二次读取文档的时候,发现与第一次的文档不一致了,这就叫做不可重复读,如果A在B完全修改完毕后再读取,那么就可以避免该问题。

    4.幻象读

    个人理解:你都已经提交给我了,你还在修改

    当一个事务的更新结果影响到另一个事务时,会发生幻象读。

    B修改了文档A提交的文档,但是在B修改的同时,A又修改了文档,并且还提交了,接着B修改完毕后提交,却发现A在把文档提交给自己修改的同时再次修改了文档。如果B在修改文档之前,没有任何人更新过文档,那么就可以避免该问题。

  • 相关阅读:
    Python 多核 多线程 调度
    mysql-select for update
    Python logging模块
    TCP/IP和HTTP协议与Socket的区别联系
    DNS+CDN
    wget命令
    Cannot find module 'webpack-cli/bin/config-yargs
    TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'
    js 创建私有变量
    报错集锦及解决方案
  • 原文地址:https://www.cnblogs.com/OliverQin/p/9655723.html
Copyright © 2020-2023  润新知