本文主要内容

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. Objective-C中字典的使用方法总结

    在Objective-C中提供了两个类来实现字典,即NSDictionary和NSMutableDictionary.其中,NSMutableDictionary是NSDictionary的子类,它继 ...

  2. ASP.NET MVC 及 Areas 简单控制路由

    ASP.NET MVC中怎么去控制路由,这个想关的文章很多,我在这里就是自我总结一下,仅供参考. 1.我们新建一个项目,查看RouteConfig.cs,代码如下: public static voi ...

  3. jQuery之$(document).ready()使用介绍

    学习jQuery的第一件事是:如果你想要一个事件运行在你的页面上,你必须在$(document).ready()里调用这个事件 学习jQuery的第一件事是:如果你想要一个事件运行在你的页面上,你必须 ...

  4. ThoughtWorks FizzBuzzWhizz 代码实现

    当时拉钩网ThoughtWorks出了一道面试题(https://www.jinshuju.net/f/EGQL3D),本人用PHP实现了一下,当时忘记了把代码分享出来,今天特来补上. FizzBuz ...

  5. 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础

    第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1    初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...

  6. How to use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem

    SQLIOSim是模拟SQLServer的行为来测试IO性能,也可以对损坏磁盘进行一定校验 这是一个SQL Server 2012 安装完后自带的工具 一般在C:\Program Files\Micr ...

  7. Visual Assist X破解方法

    VC2008的破解方法:使用2008的朋友我就不多说了,直接拷贝到你选择的那个安装目录去,例如 C:\Program Files\Visual Assist\ ,直接运覆盖VA_X.dll 即可VC2 ...

  8. 【css老版本浏览器兼容利器】ie-css3.htc

    做前端的同学都应该听说或者用过,是一段脚本,可以让ie实现css3里的圆角和阴影效果. css带来的便利是很容易感受的到的,但恶心的是它在ie下的不兼容,所以某位牛人现身写了个ie-css3.htc, ...

  9. Java Day 03

    比较运算符 & 逻辑运算符 > >= == < <= != instanceof  & && | || ^ ! //逻辑运算符用于连接两个boo ...

  10. 101个MySQL的调节和优化的Tips

    MySQL 是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些 ...