加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 中的事务

发布时间:2020-12-12 15:05:54 所属栏目:MsSql教程 来源:网络整理
导读:数据库已经使用两年多了,今天刚刚把事务的隔离级别搞清楚真是有点说不过去,今天把体会写在这里: ? ? 说到事务的隔离级别先说一下事务在并行运行中会遇到的个问题 ? ? 1.脏读(dirty reads) 一个事务读取了另一个未提交的并行事务写的数据。 ? 2.不可重复
读未提交(Read uncommitted) 可能 可能 可能 读已提交(Read committed) 不可能 可能 可能 可重复读(Repeatable read) 不可能 不可能 可能 可串行化(Serializable ) 不可能 不可能 不可能 上表为引用

?

所谓的事务隔离级别其实就是 改变了其它事务在执行过程中对自己的事务的影响方式。同时也改变了自己事务对其它事务的影响方式

如果把自己事务隔离级别改为读未提交。则在自己事务的执行过程中能过读取其它任何事务未提交数据(不管其它事务的隔离级别)

读已提交则相反只能读其它事务已经提交的事务

如果把自己的事务设置为可重复读则在自己的事务未结束之前,其它的事务可以查询但不能更改被自己事务锁定(应该是共享锁)的记录

?

可串行化其实就是在一个 where? 语句所能影响的行记录上加上了共享锁

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

数据库已经使用两年多了,今天刚刚把事务的隔离级别搞清楚真是有点说不过去,今天把体会写在这里:

?

? 说到事务的隔离级别先说一下事务在并行运行中会遇到的个问题

?

? 1.脏读(dirty reads)

一个事务读取了另一个未提交的并行事务写的数据。

? 2.不可重复读(non-repeatable reads)

一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。

? 3.幻读(phantom read)

一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。

?

? 关于脏读这个非常好理解,就是事务A在读取数据的时候读取到了其它事修改了但还没有提交的数据,未提交的数据有可能被回滚所以称之为脏数据,这也是脏读的由来吧(大概)

?

? 关于不可重复读?

? 举个例子--如果事务A有两个阶段

????? 1 select XXX from table where id = 1?;?

???? ?2. select XXX from table where id = 1 ;

? 上面的两条语句在同一个事务中。按理说应该返回的数据应该一样,

?但是在事务A执行到阶段1后,阶段2之前? ,如果有另一个事务修改了 id 等于1的这条数据并且已经提交了。就会造成 两个阶段查询产生的数据不一样。不可重复读就是一个事务中两次同样的语句中出现了不同的结果

?

??? 关于幻读

????? 同样一个事务A有两个阶段

????? 1. select XXX from table where id between 1 and 10

??????1. select XXX from table where id between 1 and 10

同样上面的两个语句 在执行到1后2前时候,其它的事务 删除了或增加了 id在1至10内的记录 那么两个阶段产生的查询结果是不同的

?

?

隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)
    推荐文章
      热点阅读