PostgreSQL事务隔离级别
一、概念
并发控制是多个事务在并发运行时,数据库保证事务一致性(Consistency)和隔离性(Isolation)的一种机制。PostgreSQL使用了多版本并发控制技术的一种变体:快照隔离Sanpshot Isolation(简称SI)。通过SI,PostgreSQL提供了四个事务隔离级别,隔离级别从低到高分别是:Read uncommitted 、Read committed 、Repeatable read 、Serializable。在各个隔离级别上被禁止出现的现象是:
- 脏读:一个事务读取了另一个并行未提交事务写入的数据。
- 不可重复读:一个事务重新读取之前读取过的数据,发现该数据已经被另一个事务(在初始读之后提交)修改。
- 幻读:一个事务重新执行一个返回符合一个搜索条件的行集合的查询, 发现满足条件的行集合因为另一个最近提交的事务而发生了改变。
- 序列化:禁止所有并发异象,效果如同事务以串行的方式执行。
1、Read uncommitted
读未提交,指的就是一个事务可以读取另一个未提交事务的数据。
打个比方:你打算在网上买一台新的电脑,看到一家店中原价6000的电脑,现价只要998,没错,只要998。但是当你开开心心去付款的时候,价格又变成了6000,为啥呢?原来店家老板在输入商品单价的时候(事务开始),不小心按错写成998了,但是事务还没有提交,这时被你看见了,可老板及时发现了不对,马上回滚差点就提交了的事务,将数字改成6000再提交。
小结:商品价格还是原先的6000,但是你却看到了998。这是老板输错了还没提交的数据,这就是脏读。
那怎么解决脏读呢?Read committed!读提交,能解决脏读问题。
2、Read committed
读提交,就是指一个事务要等另一个事务提交后才能读取数据。
打个比方:尽管你发现这台电脑不是998,而是6000,因为你很喜欢,所以咬咬牙还是决定用卡里最后的6000块买下这台电脑。当你开始支付订单时(事务开始),收费系统事先检测到你的卡里有6000块。但是当收费系统准备扣款时,再检测卡里的金额,发现钱不够了。你还在纳闷为啥的时候,你收到一条短信:恭喜您成功续费xxx视频的会员!原来你之前购买的xxx视频的会员在这个时候自动续费了,扣掉了20块,导致你没钱买电脑了(第二次检测金额就是等待会员续费转出金额事务提交完)。
说明:这就是读提交,若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。但在这个事例中,出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。
3、Repeatable read
重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。
举例:你终于等到发工资了,这时你卡里有钱去买电脑了。当你支付订单时(事务开启,不允许其他事务的UPDATE修改操作),收费系统检测到你卡里有6000块,现在不允许其它事务从你的卡里扣钱了,你终于如愿买到新电脑了。
说明:利用重复读终于可以解决不可重复读问题了。但是要注意的是:不可重复读对应的是修改,即UPDATE操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。
4、幻读
买完电脑之后,你想看看今天的账单,看看卡里还是多少钱。看到确实是花了6000元,还剩1000块,就在这个时候,你的视频会员又给你自动续费了,即新增INSERT了一条消费记录,并提交。当你打印出自己的账单时,发现卡里980了,怎么少了20块,似乎出现了幻觉,这就是幻读
5、序列化
Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
二、操作
1、查询postgreSQL默认的隔离级别:show default_transaction_isolation;也可以在数据库级别设置默认的隔离级别:#default_transaction_isolation = 'read committed'
2、检查当前隔离级别:show transaction_isolation;
3、修改当前事务的隔离级别,须在事物中执行:set transaction isolation level serializable;
4、修改当前会话默认的隔离级别:set default_transaction_isolation='repeatable read';
PostgreSQL事务隔离级别的更多相关文章
- Innodb中的事务隔离级别和锁的关系
前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...
- Innodb中的事务隔离级别和锁的关系(转)
原文:http://tech.meituan.com/innodb-lock.html 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库 ...
- Mysql数据库事务隔离级别
事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...
- MySQL InnoDB中的事务隔离级别和锁的关系
前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...
- 【概念原理】四种SQL事务隔离级别和事务ACID特性
摘要: SQL事务隔离级别和事务的ACID特性 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性. 事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UNCOMMITTED.R ...
- MySQL数据库引擎、事务隔离级别、锁
MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...
- 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系
重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...
- Innodb 中的事务隔离级别和锁的关系
转自:https://tech.meituan.com/innodb-lock.html 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据 ...
- Innodb中的事务隔离级别和锁的关系(转载)
nodb中的事务隔离级别和锁的关系 原文:https://tech.meituan.com/innodb-lock.html ameng ·2014-08-20 15:50 前言: 我们都知道事务的几 ...
- 【转载】Innodb中的事务隔离级别和锁的关系
前言 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所 ...
随机推荐
- 用 Java?试试国产轻量的 Solon v1.11.4(带视频)
一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...
- C#中的进程检测退出事件和座位状态改变事件深入浅出谈谈EventHandler的使用
关于进程 之前我在启动我的师生对讲的exe的时候,都是直接调用Process类的静态函数Process.Start(System.String AppPath,System.String Argume ...
- 中国蚁剑 - AntSword
中国蚁剑 - AntSword 中国蚁剑是一种跨平台操作工具,它主要提供给用户用于有效的网络渗透测试以及进行正常运行的网站. 否则任何人不得将网站用于其无效用途以及可能的等目的.自己承担并追究其相关责 ...
- MasaFramework -- i18n (国际化)
概念 作为一个普通开发者, 我们负责的项目的使用群体大多数是本国的人民, 但不可避免的也有一些做外贸的业务或者给外企做的项目, 这个时候就要求我们的项目有服务全球客户的能力, 而一个支持国际化能力的框 ...
- ArcGIS工具 - 导出空数据库
有时,需要根据已有的成果数据创建一个空的数据库模板文件,用于新的编辑或对外发布.那么,如果又快又好的创建呢?为源GIS为您编写了一个导出空数据库工具,它可以实现"一键"快速导出任意 ...
- Java自动装箱与拆箱
装箱就是自动将基本数据类型转换为包装器类型(int-->Integer).调用方法:Integer的 valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型(Integer- ...
- 如何使用 JuiceFS 创建 WebDAV 共享
WebDAV 是一种基于 HTTP 的文件共享协议,最初被设计用于多用户文档协作编辑的场景,也被广泛应用在基于互联网的文件存储.数据同步等网盘类应用场景. 手机端和 PC 端有大量的应用内置了对 We ...
- PHP判断访问来源是PC端还是移动端
一个方法轻松搞定,各种判断后当返回true为移动端,反之为PC端. function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($ ...
- springboot集成ElasticApm
jvm参数方式: -javaagent:D:/codesoft/elastic-apm-agent-1.18.0.jar -Delastic.apm.service_name=my-applicati ...
- XMind 2022 安装教程 (11-30亲测有效)
下载地址 下载直通车:立即下载 解压文件 鼠标右击[XMind2022(64bit)]压缩包(win11系统需先点击"显示更多选项")选择[解压到 XMind2022(64bit) ...