当前位置: 首页 > wzjs >正文

济南网站优化技术厂家北京协会网站建设

济南网站优化技术厂家,北京协会网站建设,常州外贸集团 网站建设,wordpress设置3011. 事务隔离的概念 在数据库管理系统中,事务隔离是一项重要的功能,它能确保在并发访问数据库时事务之间能够独立运行,不会相互干扰。数据库系统通常支持不同级别的事务隔离,用来满足不同应用程序之间的需求。 2. 事务隔离的种类…

1. 事务隔离的概念

在数据库管理系统中,事务隔离是一项重要的功能,它能确保在并发访问数据库时事务之间能够独立运行,不会相互干扰。数据库系统通常支持不同级别的事务隔离,用来满足不同应用程序之间的需求

2. 事务隔离的种类 

常见的事务隔离的种类也一共有四种包括读未提交、已提交、可重复读和可序列化对于并发的事务,常见的一些可能发生的行为包括

  1. 脏读:一个事务读取了另一个未提交的事务写入的数据
  2. 不可重复读:一个事务重新读取了前面读取过的数据,但是该数据已经发生了改变
  3. 幻读:一个事务开始之后,需要根据数据库中现有的数据做一些更新,于是重新执行一个查询,返回符合查询条件的行,这个时候发现因为其他最近提交的事务自身发生改变,导致现有事务如果继续执行可能会发生错误。

下表代表的是不同的事务隔离级别对应的可能会发生行为的对照关系。

隔离级别

脏读

不可重复读

幻读

读未提交

可能

可能

可能

读已提交

不可能

可能

可能

重复读

不可能

不可能

可能

可串行化

不可能

不可能

不可能

PG中默认的事务隔离级别是读已提交,而读未提交相当于是读已提交的一个更弱的版本。

这是因为读已提交的隔离级别要求一个事务只能看到已经提交的数据修改,这意味着一个事务不能读取另一个事务尚未提交的数据变换。那么这种隔离级别提供了一定的数据一致性,防止脏读。这也是为什么PG中采用这种隔离级别为默认的隔离级别,因为他的适应性比较广。

而相比于读已提交,读未提交的隔离级别不要求事务等待其他事务的提交,它允许一个事务读取另一个事务尚未提交的数据变化,这种隔离级别容易导致脏读,因为一个事务可能会读取到另一个正在被修改的事务,而这些事务可能会回滚,从而导致数据状态前后不一致

并且PG中内部没有实现读未提交的隔离级别,因为读未提交的隔离级别存在严重的数据一致性问题,不符合事务的ACID特性,所以并未实现读未提交,主要还是为了确保数据库的一致性和可靠性。

2.1  读已提交

  1. PG默认事务隔离级别
  2. 事务只能看到已经提交的数据
  3. 可能会发生不可重复读和幻读

案例

首先创建一个示例表,其中包含如下的信息:

create table products(id serial primary key,name varchar(50),price numeric(10,2));

select * from products;

会话1:(读操作

begin;

select * from products where id=1;

会话2:(写操作)

begin;

update products set price =66 where id = 1;

此时回到会话1:查询id=1,发现数据还是原来的数据,

会话2:

commit;

当会话2提交以后,回到会话1,就会发现数据进行了更改

这个案例说明了在读已提交隔离级别中,一个事务只能看到其他事务已经提交的数据修改,如果事务未提交,那么对于查询事务来说,这些修改是不可见的,直到其他事务提交为止

2.2 可重复读

  1. 保证在同一事务内的查询不会受到其他事务的影响
  2. 防止不可重复读,但是仍然可能发生幻读
  3. 适用场景:需要一定程度的数据一致性,可以容忍轻微的幻读。

案例

沿用上面的products表的数据,将修改的数据修改回原样。

会话1:

begin isolation level repeatable read ;

select * from products where id =1;

会话2:

此时会话2.执行更新语句,但不提交,在会话1中查看数据。

会话2:

对事务进行提交,再在事务1中查询对应的数据

可以发现,在会话1中,无论会话2提不提交,查询的结果都保持不变,即使会话2提交更新操作,查询结果仍然不变。

此时,除非对会话1也进行提交,才可以看到改动就相当于在事务的一开始对数据进行了快照,无论如何改动,都不影响读取的结果。

2.3 串行化

  1. 最高级别的隔离,确保事务之间没有任何的交错或者是并发问题
  2. 通过锁定数据来实现,防止任何形式的并发问题,包括脏读、不可重复读、幻读
  3. 性能最差,因为他几乎完全禁止并发
  4. 适用场景:对数据一致性要求非常高,可以容忍较低的性能.
  5. 事务2会进行回滚,提交失败以后,事务的回滚其实就相当于没有执行

案例:

会话1:

开始串行化隔离,插入一条新的数据,查询现在的价格

会话2;

执行与会话1同样的操作,其中开启事务的语句是同时执行的,然后再分别插入数据。

可以看到,两个会话中插入的语句只有在自己的事务中才可以查看到

此时将会话1事务进行提交,然后将会话2事务进行提交,可以看到,会话1提交成功,而会话2会失败,且会话2中的事务发生了回滚,舍弃了之前的插入操作,

重新查询两个会话中表的信息发现只能查询到会话1提交的事务。


文章转载自:

http://LWa5c9gs.gqnLL.cn
http://a0yiTKP2.gqnLL.cn
http://6DwPDvuZ.gqnLL.cn
http://GRQIlA0A.gqnLL.cn
http://Le6m2Sjp.gqnLL.cn
http://sp4qeBS5.gqnLL.cn
http://tH4ID3Ay.gqnLL.cn
http://SCfwkELK.gqnLL.cn
http://bOEPOGYy.gqnLL.cn
http://GJMOBLzp.gqnLL.cn
http://NduI6ZtM.gqnLL.cn
http://bNAB1JhP.gqnLL.cn
http://cTogVaOr.gqnLL.cn
http://jzlQ2mwE.gqnLL.cn
http://WUAwnouB.gqnLL.cn
http://0q5VuD30.gqnLL.cn
http://8R7tUw94.gqnLL.cn
http://SpqZTpiS.gqnLL.cn
http://rb1SPctD.gqnLL.cn
http://F3iBAM1S.gqnLL.cn
http://P91jDLb0.gqnLL.cn
http://Tn7KUSRf.gqnLL.cn
http://JF4wdRh3.gqnLL.cn
http://IL138q17.gqnLL.cn
http://G6JUdtnB.gqnLL.cn
http://pOb8rnxc.gqnLL.cn
http://CsRiYj1Z.gqnLL.cn
http://U8zXZrod.gqnLL.cn
http://vJjdldmF.gqnLL.cn
http://LPwTM4KV.gqnLL.cn
http://www.dtcms.com/wzjs/687392.html

相关文章:

  • 如何建设音乐网站网络推广培训哪个好
  • 柳州网站制作公司电子商务有限公司名字大全
  • 环翠区网站建设wordpress 怎么加载js
  • wordpress小说站上海市企业登记网络服务平台
  • 太原好的网站制作排名企业型网站建设方案
  • 学校网站维护番禺建设网站公司
  • 椒江哪里可以做公司网站网站怎么添加友情链接
  • 网站建设公司巨头网站建设需要什么资料
  • 网站管理建站怎样做软件开发
  • 有那个网站做简历模板thinkphp做的网站源码
  • 广告网站建设报价广安市建设局官方网站
  • 网站切片 做程序二级域名分发网站
  • vs2015网站开发基础样式广东网站建设服务
  • 赤峰网站建设赤峰wordpress添加附近商家
  • 肇庆网站建设维护本地云搭建wordpress
  • php网站上传教程百度站长工具平台
  • 网站建设布局样式如何避免网站被攻击
  • 成都本地网站百度做网站哪里可以学
  • 五屏网站建设如何互联网创业项目有哪些
  • 深圳网站建设公司服务商wordpress数据库表
  • 城阳网站建设网站留言板作用
  • 网站建设设置背景图片做网站前端需要懂得
  • 交互式网站设计小程序开发 深圳
  • 安徽省住建厅网站官网山西省网站建设备案表
  • 谁有好的网站推荐一个做汤的网站有哪些
  • 哈尔滨市建设工程质量安全站广州最新通告
  • 贵阳专业网站建设公司哪家好济南正规的网站制作
  • 外贸开发模板网站模板企业的所得税费用怎么算
  • 小说网站模板哈尔滨网站制作前景
  • 外贸营销网站制作公司沈阳好的互联网设计