本文主要内容

1.transaction的可串行化

2.数据库并发带来的问题, dirty read, Nonrepeatable reads, Phantoms幻读

3.隔离级别和2中的问题

4. 悲观锁和乐观锁

5. 锁类型,DML锁,DDL锁,闩,手动锁和用户定义锁

什么是transaction可串行化

通常,不管数据库初态怎样,一个调度对数据库状态的影响都和某个串行调度相同,我们就说这个调度是可串行化的。

理想情况下,transaction就应该是可串行化的。 意思就是几个transaction同时执行和串行执行的结果应该是一样的。 所以,同时执行的时候,哪个先执行,哪个后执行无关。

例子, T1和T2都要更新2个值

T1, data1=data1*2, data2=data2*2

T2, data1=data1+1, data2=data2+1

比如当前要更新2个值, data1=0 and data2=10,

1)串行执行, 先T1,再T2,结果就是data1=1 and data2=21.

2)串行执行,先T2,再T1,结果就是data1=2 and data2=22.

3)如果交叉执行, T1先执行data1, 再T2执行data1, 再T2执行data2, 再T1执行data2, 结果就是1 and 22。

4)如果#3中交叉执行的顺序换一下, 那么结果就是2 and 21。

5)交叉执行, T1先执行data1, 再T2执行data1, 再T1执行data2, 再T2执行data2,  结果就是1 and 21。

6)交叉执行, T2执行data1, 再T1先执行data1, 再T2执行data2,  再T1执行data2, 结果就是2 and 22。

上面的调度中#5, $6执行的结果和串行执行的结果一样,所以调度#5, #6是可串行化的。

#3和#4执行结果和串行执行的结果不一样,所以调度#3,#4不是可串行化的。

为什么串行化如此重要?用一个例子说明

一个销售员在输入订单的时候,会计在记账。

1)比如销售员输入一个X公司的订单,但是还没提交,还在很x公司商量

2)会计查到所有还没结算的订单,谈后给X公司发去账单。

3)这时x公司决定减少订单数,销售再次修改,然后提交

4)但是错误的订单已经发送给x公司。

上面这个调度就是不可串行化的调度。所以数据库的任务就是通过同步机制,让并行事物的调度都是可串行化的。通过加锁来让销售员或会计的事物串行执行。保证并发操作调度正确性的方法:

  •    封锁方法:两段锁(Two-Phase Locking,简称2PL)协议
  •    时标方法
  •    乐观方法

Oracle 6 - 锁和闩 - transaction的可串行化的更多相关文章

  1. 关于ORACLE的串行化隔离级别--来自ORACLE概念手册

    为了描述同时执行的多个事务如何实现数据一致性,数据库研究人员定义了被 称为串行化处理(serializability)的事务隔离模型(transaction  isolation model).当所有 ...

  2. Oracle 6 - 锁和闩 - 锁类型

    Oracle锁大类 1.DML锁 (SELECT, INSERT, UPDATE, DELETE, MERGE是对数据库加的锁, 可能是行锁,也可能是表锁) 2.DDL锁 (Create, Alter ...

  3. Oracle 6 - 锁和闩 - 并发问题和隔离级别

    并发带来的问题 1.脏读dirty read 脏读的问题是transaction读到了没有被提交的数据.例如,T1更新了data1,还没提交,这时T2读取了更新后的data1, 用于计算和更新别的值, ...

  4. Oracle 事务 锁

    一. 事务 是一系列的数据库操作,是数据库应用的基本逻辑单位以及并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 要将有组语句作为事务考 ...

  5. oracle 事务 锁机制

    原文地址:http://www.cnblogs.com/quanweiru/archive/2013/05/24/3097367.html 本课内容属于Oracle高级课程范畴,内容略微偏向理论性,但 ...

  6. oracle的锁与并发机制

    锁是并发访问的时候用于保护不共享资源不被同时并发修改的机制.oracle锁分为DML锁,DDL锁,内部锁和latch DML锁确保一次只能只有一个人修改某一行(TX锁),而且正在处理一个表时别人不能删 ...

  7. Oracle基础 锁

    一.锁 数据库是一个多用户使用的共享资源.当多个用户并发地存储数据时,数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 锁是实现 ...

  8. Oracle的锁

    Oracle数据库中的锁机制 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数 ...

  9. oracle的锁种类知识普及

    锁概念基础 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加 ...

随机推荐

  1. iOS开发之窗口和视图

    视图就是应用程序的界面.视图可以使用nib文件实现,也可以使用代码创建.一个视图也是一个响应器(UIResponder的子类)这意味着一个视图可以与用户交互.因此,视图不只是用户可看到的界面,也是可以 ...

  2. 淘宝店铺应用android源码

    一个淘宝店铺的app 界面模仿蘑菇街 完结版很多朋友想知道web端 我发上来 是用thinkphp框架 懂的同学拿去研究 ,之前做的前台 现在基本上不能用 就看个后台就好了 也比较简单 我放上来 大家 ...

  3. 安装WordPress详细教程指南

    最近准备自己建一个个人博客,以便分享一些自己工作生活中的一些观点及经验,建博客当然选wordpress,毕竟wordpress是为博客而生的嘛.下边记录一下自己安装WordPress的详细过程指南,亦 ...

  4. jquery的change 事件

    jquery的change 事件 . <script src="jquery.min.js" type="text/javascript">< ...

  5. 30个HTML5学习资源

    早在几个星期前,Adobe就发布了Dreamweaver CS5 HTML5 Pack的预览版下载.众所周知,HTML5在互联网领域掀起了一场大论战,并让Adobe的日子很难熬.HTML5致力于为前端 ...

  6. textarea 在光标处插入文字

    效果演示 // 欢迎访问cssfirefly.cnblogs.com html: <textarea id="text" style="width:500px;he ...

  7. 伴随ListView、RecyclerView、ScrollView滚动滑入滑出小图标--第三方开源--FloatingActionButton

    FloatingActionButton在github上的项目主页是:https://github.com/makovkastar/FloatingActionButton 它的依赖包NineOldA ...

  8. mercurial(hg)使用

    # 版本管理软件的比较 svn 每个目录下建一个.svn目录实在是不爽. git 分支管理非常方便,但没感觉有什么用,主要还是在修改前提交一次代码, 等后悔时再回来,没什么其他的目的.关键是中文乱码问 ...

  9. GoldenGate单向复制配置示例

    一:环境介绍 --source端 ip地址:192.168.123.10 数据库版本:11.2.0.1.0 32 bit 操作系统版本:centos 4.5 32 bit ogg版本:fbo_ggs_ ...

  10. [转]init.d解析

    本文为转载,放在这里以备忘. init.d指的是/etc/rc.d/init.d目录.本文包括3部分内容1. Linux的引导过程2. 运行级别3. /etc/rc.d/ 与/etc/rc.d/ini ...