本文主要内容

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. ListBox复选框拓展

    Toolkit的LongListMutiSelector的复选框功能,想必许多人都需要吧!然而系统本身控件ListBox虽然也有多选功能,可是外观上却缺乏复选框,选择效果只是颜色变化.于是在上一个项目 ...

  2. 解决grub引导错误的一次经历

    我的电脑上一共是两块硬盘,1块固态硬盘(sda)装了win7,另外一块普通硬盘(sdb)装了ubuntu和centos两个系统,系统启动的引导是装在sdb上面的ubuntu的grub2,它负责选择不同 ...

  3. LR通过SiteScope监控mysql

    SiteScope下载,安装 要想使用LoadRunner监测MySQL数据库的性能,LoadRunner没有提供直接监测 MySQL的功能,所以,我们需要借助sitescope监控,然后在LoadR ...

  4. 关于LINQ一个简单例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  5. ORACLE 语句关联统计

    很久不用SQL语句了,貌似入职新公司后,又回归到了三年前的SQL时代,一写一坨的SQL好吧,也当回归一下过去的知识. 下面是统计2月份某数据的计费统计 select t.telno as 主号,VID ...

  6. Win7下MongoDB安装

    一.下载MongoDB 下载地址:http://www.mongodb.org/downloads 注意:1.从2.2开始,MongoDB不再支持windows xp. 2.32位MongoDB最大支 ...

  7. MAC上 nodejs express 安装

    最近在MAC上搭建 nodejs环境以及安装 express 框架,遇到了一些问题,不过最后总算还是安装成功了,下面是操作步骤 1.node js 安装 访问nodejs官网进入下载mac上的安装包 ...

  8. 批量修改文件后缀(Python)

    近期下载了很多各种教程, 但是不幸的是后缀名都是 ".mp4", 而本人喜欢 ".rmvb" 后缀,由于有轻微洁癖, 受不了后面的 ".mp4&quo ...

  9. libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.9-1.el6.x86_64

    版本:5.7.9 新装的CentOS 6.3 安装MySQL 5.7.9 出现的问题 1.首先卸载系统自带的mysql 5.1的包    yum   -y  remove   mysql-libs-5 ...

  10. 【BZOJ 1090】[SCOI2003]字符串折叠

    Description 折 叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S  S 2. X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S)  SSSS…S(X个S). ...