MS-SQL事务隔离级别.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracel和SQL Server并发性和读一致性比较 事务:事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的 SQL server中数据库的默认隔离级别是READ COMMITTED 并发访问的不利影响 并发访问,如果没有并发访问控制机制,可能产生的不利影响有以下几种: 脏读,丢失更新,不可重复读,幻像读 1.脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。 2.丢失更新:当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。 3.不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。 4.幻象读:指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。 假如有两个事务并发,顺序如下: 那么在事务A中,query1跟query2查询出来的结果是否一样呢?这就跟事务隔离级别有关了。 SQL的标准定义里面,一共有四种级别: 1.read uncommited:读取未提交的数据.就是其他事务已经修 改但还未commit的. 2.read commited:读取已提交的数据query2会跟query1读取 的数据不一样. 3.repeatable read:可重复读取,即query1跟query2读取的 数据是一样的. 4.serializable:序列化. SQL标准用三个必须在并行的事务之间避免的现象定义了四个级别的事务隔离。 这些不希望发生的现象是: 1.脏读(dirty reads:一个事务读取了被另一个事务改写但 还没提交的数据. 2.不可重复读(non-repeatable reads:一个事务重新读取前 面读取过的数据,发现该数据已经被另一个已提交的事务修改过(一个事务执行相同的查询两次或两次以上,但每次查询结果都不一样。这由于另一个并发事务在两次查询之间更新(update了数据. 3.幻读(phantom read:在两次查询同一时间点数据时,发现 数据数量发生改变。(当一个事务读取几行记录后,另一个并发事务插入(insert,delete一些记录. SQLServer 我们首先在SQLServer上做了实验,SQLServer一共支持四种隔离级别,read uncommited跟read commited我们没有实验,我们直接先实验repeatable read.如果事务A定义了如下级别,那么当事务B执行到modify1这条语句时,如果modify1是update的话,就 被锁起来,一直等到事务A提交完以后,锁才会被释放。而如果是insert的话,则可以顺利进行下去,然后在事务A中,query2查到的数据,是已经被事务B修改过的数据。(发生了幻读如果将级别定义在serializable的话,则在modify1语句中,update,insert 或者delete都会被锁掉。也就是说,SQLServer对这些级别的支持,是通过锁来做到的,虽然可以保证事务正常进行,但是并行的性能却很差。 Oracle oracle只支持两个级别,read commited跟serializable,实验的结果是,oracle的serializable是通过版本控制(scn来完成的,而不是通过锁机制,这就保证了并行的性能。Oracle的默认级别是read commited. 的事务级别 Oracle的事务级别 Oracle Oracle明确支持read committed和serializable、read only三个级别语句级别read committed; 语句级别的read committed=serializable的一致性+read uncommited的并发性 读一致性实现—Oracle Oracle利用Undo Record和MultiversionData实现一致性 Writer will not block reader an

文档评论(0)

44488569 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5101121231000003

1亿VIP精品文档

相关文档