事务隔离级别与封锁规则用写锁,读锁解决丢失修改,脏读,不可重复读,幻像读

并发操作的不正确调度可能会带来丢失修改,不可重复读和读脏数据不一致等问题,不同的事务隔离级别分别在不同程度上解决了这一问题,为并发操作的正确调度提供一定的保证,本文介绍Read uncommitted(未提交读) Read committed(提交读) Repeatable read(可重复读) Serializable(可串行化),这四种事务隔离级别的封锁规则。  首先介绍X锁,S锁的概念。

X锁

X锁,又叫排他锁,写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它事务都不能对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能读取或修改A。

S锁

共享锁,读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但T释放A上的S锁之前不能对A做任何修改。

Read uncommitted(未提交读)

当事务设置了未提交读时,解决了丢失修改问题,事务T在修改数据之前必须先对其加X锁,直到事务结束才释放

当然,在操作仅仅是读数据的时候,读数据不会对其产生修改,则其不必等待也不需要加任何锁

所以,它不能保证不脏读数据,可重复读和无幻像读

Read committed(提交读)

解决了丢失和脏读问题。事务T在修改数据R之前必须先对其加X锁,直到提交事务才释放;事务T在读取数据R之前必须对其添加S锁,读完即可释放S锁

提交读保证运行在该隔离级别的事务不会读取到其他未提交事务所修改的数据。如果另外一个是事务正在更新数据,它所更新的数据上持有排他锁,那么此隔离级别上的事务在访问该数据之前必须等待其它事务其上的排他锁。同样地,此隔离级别上地事务必须在所访问地数据上至少放置共享锁。共享锁不会防止其它事务读取数据,但它会防止其它事务修改数据。

共享锁在数据发送给请求它地客户端之后就可以释放,它不需要保持到事务结束。由于读完就可释放S锁,所以它不能保证可重复读和无幻像读。

Repeatable read(可重复读)

解决了丢失修改,脏读和不可重复读的问题,但允许发生幻想读。事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放;事务T在读取R之前必须先对其加S锁,直到事务结束才释放。

可保证一个事务如果再次访问同一数据,与此前访问相比,数据不会发生改变,换句话说,在事务两次同一数据之间,其它事务都不能修改数据。但可重复读允许发生幻想读

为保证可重复读,事务必须保持它的共享锁一直到事务结束。

没有其它事务能修改可重复读事务正在访问的数据,显然这会极大的降低系统的并发性。

Serializable(可串行化)

解决了,丢失修改,脏读,不可重复读和幻像读问题,即并发操作的四个不一致问题,为保证可串事务隔离级别必须遵守两段锁协议

两段锁协议::保证并发调度可串行性的封锁协议,要求事务分两个阶段提出加锁和解锁申请,在对任何数据进行读,写操作之前,首先要申请并获得对该数据的封锁,在释放一个封锁之后,事务不再申请和获得任何其它封锁

隔离级别锁模式
S锁X锁
Read uncommited
Read commited
Repestable read
Serializable

并发操作带来的错误类型

丢失修改

两个事务T1和T2读入同一数据并修改,T2提交的修改结果破坏了T1的修改结果,导致T1的修改被丢失。丢失修改又称为写-写错误

脏读

事务T1修改某一数据,将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已经修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就是“脏”数据,即不正确的数据

不可重复读

事务T1读取某一数据之后,事务T2对其做了修改,当T2再次读取该数据时,得到与前次不同的值。不可重复读又称作读-写错误

幻像读

事务T2按一定条件读取了某些数据后,事务T1差入(或删除)了满足这些条件的数据,当T2再次按相同条件读取数据时,发现多了(少)一些数据

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库系统原理 事务 概念 事务是逻辑上的一组操作,要么都执行,要么都不执行。 特性 ACID 1. 原子性(Atomicity) 事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。 回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。 2. 一致性(Consistency) 数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的取结果都是相同的。 3. 隔离性(Isolation) 一个事务所做的修改在最终提交以前,对其它事务是不可见的。 4. 持久性(Durability) 一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。 可以通过数据库备份和恢复来实现,在系统发生崩溃时,使用备份的数据库进行数据恢复。 并发一致性问题 在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。 丢失修改 T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。 java-数据库系统原理全文共3页,当前为第1页。 java-数据库系统原理全文共3页,当前为第1页。 脏读 T1 修改一个数据,T2 随后取这个数据。如果 T1 撤销了这次修改,那么 T2 取的数据是脏数据。 不可重复读 T2 取一个数据,T1 对该数据做了修改。如果 T2 再次取这个数据,此时取的结果和第一次取的结果不同。 幻影 T1 取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次取这个范围的数据,此时取的结果和和第一次取的结果不同。 事务隔离级别 产生并发不一致性问题主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁(加)来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务隔离级别,让用户以一种更轻松的方式处理并发一致性问题。 事务隔离级别如下: 隔离级别 说明 未提交(READ UNCOMMITTED) 事务中的修改,即使没有提交,对其它事务也是可见的。 提交(READ COMMITTED) 一个事务只能取已经提交的事务所做的修改。 可重复(REPEATABLE READ) 保证在同一个事务中多次取同样数据的结果是一样的。 可串行化(SERIALIZABLE) 强制事务串行执行。 java-数据库系统原理全文共3页,当前为第2页。事务并发访问引起的问题及使用哪种事务隔离级别避免: java-数据库系统原理全文共3页,当前为第2页。 并发访问问题 事务隔离级别 丢失修改 MySQL 所有事务隔离级别在数据库层面上均可避免 脏读 READ-COMMITTED 事务隔离级别以上可避免 不可重复读 REPEATABLE-READ 事务隔离级别以上可避免 幻 SERIALIZABLE 事务隔离级别以上可避免 即: 事务隔离级别 并发问题 丢失修改 脏读 不可重复读 未提交 (READ UNCOMMITTED) 避免 发生 发生 发生 提交 (READ COMMITTED) 避免 避免 发生 发生 可重复 (REPEATABLE READ) 避免 避免 避免 发生 可串行化 (SERIALIZABLE) 避免 避免 避免 避免 java-数据库系统原理全文共3页,当前为第3页。 java-数据库系统原理全文共3页,当前为第3页。 java-数据库系统原理
第一章 k3的安装及卸载问题 7 1.1 K3安装所需要的环境 7 1.2 K3对于sql语言排序规则的要求 7 1.3 在安装SQL Server SP3,出现无论用windows认证还是混和认证,都出现密码错误的情况。查看临时目录下的sqlsp.out,会发现以下描述: 7 1.4 SQL Server安装过程中出现“以前进行的程序创建了挂起的文件操作,运行安装程序前,必须重新启动”。 7 1.5 安装SQL2004 SP4补丁包时双击运行SETUP.bat后提示“已有一个安装实例在运行,无法执行此安装向导”。 7 1.6 SQL服务器更改计算机名称后,不能msql服务启动。 8 1.7 如何不重新安装sql而更改sql的语言排序规则。 8 1.8 SQL server安装过程中,安装程序安装到:安装程序正在安装ms数据访问组件时,屏幕出现错误提示:“command line option syntax error,type command/? for help”然后点确定继续,结果到:安装程序正在安装HTML帮助时,屏幕又出现标题为html help 1.32 update错误警对话框提示:“command line option syntax error,type command/? for help”,再点确定继续,安装程序开始复制文件,复制完文件后又出现错误提示:无法找到动态连接库sqlunirl.dll(sqlunirl.dll是MDAC的一个组件),请指定路径点确定后安装程序停止运行,让查看安装日志。 8 1.9 K3多语言版本对操作系统的适应性。 8 1.10 K3安装过程中报如图错误: 10 1.11 在win2003英文操作系统上(区域语言选项为英文)安装k310.2,点击环境检测无响应,直接对忽略环境检测,执行对k3产品的安装时报错,在进程中杀掉IKernel.exe无效如图: 10 1.12 安装k3产品时,安装过程中报如图错误: 11 1.13 安装完K/3,组件没有正确注册,不能正常运行K/3;在添加/删除程序中卸载K/3 时出现提示如图: 11 1.14 如何处理克隆安装的系统。 11 1.15 K3运行时反复提示安装Office2000的解决方法。 12 1.16 K3合并报表如何进行单独安装。 12 1.17 K310.3如何对加密服务进行加载和反加载。 12 1.18 K3不同组件的手动注册方法。 12 1.19 K3安装过程中报如图错误: 14 1.20 K3安装或注册过程报如图错误,手动注册组件无效。 15 1.21 如何手动卸载K3 15 1.22 K3不能在系统的添加/删除程序不能卸载加密卡驱动程序。 16 第二章 k3客户端的配置及应用问题 17 2.1 K3远程组件配置无法启动,并且出错类似如图。 17 2.2 K3远程组件配置工具列表为空。 17 2.3 K3消息平台的应用中,粘贴附件。接受方不在同一计算机的情况不能查看。 18 2.4 K3在客户端进入凭证录入或帐簿查询时,提示“文件/路径错误”的报错信息,提示框显示是金蝶套打设置。 18 2.5 K3客户端在单据新增的时候,出现错误提示“单据显示出错”,无法新增单据。 18 2.6 K3引料单保存第一张的时候正常,继续保存第二张的时候提示远程服务器不存在或不可用,此报错只有在XP系统出现。 18 2.7 K3中间层是WINDOWS2003操作系统,客户端登录主控台时提示“定义的应用程序或对象错误/nt anthorith/networkservice”。 18 2.8 在客户端应用系统工具时,提示“系统没有检测到安装文件,请确认是否已安装提示”。 18 2.9 K3客户端用普操作系统USERS组用户登陆系统,登陆K3提示注册表权限不足。 19 2.10 终端客户端运行K3客户端时提示:客户端不能与中间层在同一台机器上,事实上确实是没有在终端服务端安装中间层。 19 2.11 K310.2&10.3安装中间层和客户端的机器要注册到其他的中间层服务器上,如何设置。 19 2.12 K3客户端如何设置登录主控台时只显示组织机构输入框没有下拉列表选择。 19 2.13 K3客户端安装了两块卡分别连接内网和外网,双击运行k/3主控台图标程序无响应,但是将连接外网网卡的网线拔出来即无此现象。 19 2.14 K3中间层启动远程组件配置工具总是提示k/3的系统服务正在本地运行,目前无法进行组件配置。 20 2.15 K3做凭证引出的时候,报“无法创建,odbc驱动错误”。 20 2.16 K3客户端主控台的消息平台不能正常发送消息。 20 2.17 K3客户端登陆主控台时提示:无法创建帐套检测部件,点击“是”以后报autom

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值