2022-05-25 postgres中的并发控制的可重复读
目录
摘要:
postgres的可重复读说明:
postgres的可重复读的具体操作测试:
一. 开启会话级别的可重复读的隔离级别
修改配置文件postgresql.conf,设置默认的隔离级别:
重新加载配置:
查看默认的隔离级别:
二. 先开启事务A
三. 开启事务B,修改特定行,并提交
四. 在事务A中, 修改同一行,造成可重复读的状态变化,查看postgres的处理
结论:
一. postgres对于可重复读的隔离级别,如果出现读取行的状态变化,则本事务将会提交失败并回滚
二. mysql的可重复读, 如果出现读取行的状态变化,则本事务将会覆盖先前的事务
摘要:
可重复读的隔离级别控制,在postgres和mysql中有不同的处理。
而可重复读,与读已提交,在隔离级别上, 又必须要具体的明白到底有哪些区别。
本文主要记录postgres的可重复读的处理。
postgres的可重复读说明:
postgres的可重复读的具体操作测试:
一. 开启会话级别的可重复读的隔离级别
修改配置文件postgresql.conf,设置默认的隔离级别:
vim postgresql.conf
default_transaction_isolation = ‘repeatable read’
重新加载配置:
pg_ctl -D /data/pg reload
查看默认的隔离级别:
show default_transaction_isolation;
postgres=# show default_transaction_isolation;
***(Single step mode: verify command)*******************************************
show default_transaction_isolation;
***(press return to proceed or enter x and return to cancel)********************default_transaction_isolation
-------------------------------repeatable read
(1 row)
二. 先开启事务A
务必先开启事务A, 然后在事务A开始后, 再开启事务B。
在事务B中执行完commit提交后, 再在事务A中修改同一行。
事务A操作:
test=# begin;
***(Single step mode: verify command)*******************************************
begin;
***(press return to proceed or enter x and return to cancel)********************BEGIN
test=*# select * from company where id=11;
***(Single step mode: verify command)*******************************************
select * from company where id=11;
***(press return to proceed or enter x and return to cancel)********************id | name | age | address | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------11 | Paul | 66 | California | 20000 | 2001-07-13
(1 row)test=*# select * from company where id=11;
***(Single step mode: verify command)*******************************************
select * from company where id=11;
***(press return to proceed or enter x and return to cancel)********************id | name | age | address | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------11 | Paul | 66 | California | 20000 | 2001-07-13
(1 row)test=*# select * from company where id=11;
***(Single step mode: verify command)*******************************************
select * from company where id=11;
***(press return to proceed or enter x and return to cancel)********************id | name | age | address | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------11 | Paul | 66 | California | 20000 | 2001-07-13
(1 row)
三. 开启事务B,修改特定行,并提交
test=# begin;
***(Single step mode: verify command)*******************************************
begin;
***(press return to proceed or enter x and return to cancel)********************BEGIN
test=*#
test=*# select * from company where id=11;
***(Single step mode: verify command)*******************************************
select * from company where id=11;
***(press return to proceed or enter x and return to cancel)********************id | name | age | address | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------11 | Paul | 66 | California | 20000 | 2001-07-13
(1 row)test=*# update company set age=88 where id=11;
***(Single step mode: verify command)*******************************************
update company set age=88 where id=11;
***(press return to proceed or enter x and return to cancel)********************UPDATE 1
test=*# select * from company where id=11;
***(Single step mode: verify command)*******************************************
select * from company where id=11;
***(press return to proceed or enter x and return to cancel)********************id | name | age | address | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------11 | Paul | 88 | California | 20000 | 2001-07-13
(1 row)test=*# commit;
***(Single step mode: verify command)*******************************************
commit;
***(press return to proceed or enter x and return to cancel)********************
四. 在事务A中, 修改同一行,造成可重复读的状态变化,查看postgres的处理
test=*# update company set age=99 where id=11;
***(Single step mode: verify command)*******************************************
update company set age=99 where id=11;
***(press return to proceed or enter x and return to cancel)********************2022-05-24 12:50:53.649 EDT [443682] ERROR: could not serialize access due to concurrent update
2022-05-24 12:50:53.649 EDT [443682] STATEMENT: update company set age=99 where id=11;
ERROR: could not serialize access due to concurrent update
结论:
一. postgres对于可重复读的隔离级别,如果出现读取行的状态变化,则本事务将会提交失败并回滚
二. mysql的可重复读, 如果出现读取行的状态变化,则本事务将会覆盖先前的事务
2022-05-25 postgres中的并发控制的可重复读相关推荐
- 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)
转载:https://www.cnblogs.com/flying-tiger/p/9567213.html#4121483#undefined PostgreSQL为开发者提供了一组丰富的工具来管理 ...
- SQL中的脏读、不可重复读、幻读
一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...
- MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
文章目录 一.MVCC概念 二.MVCC应用于已提交读隔离级别 1. 解决脏读 2. 无法解决不可重复读 3. 无法解决幻读 三.MVCC应用于可重复读隔离级别 1. 解决脏读 2. 解决不可重复读 ...
- 【SRE笔记 2022.8.25 linux用户组及用户命令】
[SRE笔记 2022.8.25] 密码修改 passwd 批量修改 chpasswd 拓展 env 显示环境变量 查看和更改密码属性 chage 参数-l 参数-E 设定账户过期时间,类似usera ...
- 2022.5.25 FreeSurfer入门练习:Recon-all
2022.5.25 FreeSurfer入门练习:Recon-all 参考资料:https://andysbrainbook.readthedocs.io/en/latest/FreeSurfer/F ...
- 【阅读材料精选 From-to-Date:2019.05.25~2019.06.28】
[阅读材料精选 From-to-Date:2019.05.25~2019.06.28] 重点内容 [文本数据集] github:https://github.com/imhuster/funNLP [ ...
- 每日总结(2022/05/17-)
2022/05/17- 线程配置 实验设备 实现2个矩阵(Width=2048, Height=1024)的相加,输入的矩阵A,B按照以下要求初始化,矩阵A的初始值全为本人学号的最后1位数字,矩阵B的 ...
- 硬件大熊原创合集(2022/05更新)
2022/05月份更新的篇章 NFC之华为AIPASS认证:测试系统简介 NFC之华为AIPASS认证:测试用例简介 智能门锁:人脸识别技术 清晰认知事物概念 传统的职业坐标体系中,个体依赖于工作本身 ...
- 前端js调用后端API获取数据的三种方法(2022.7.25)
前端js调用后台API获取数据的三种方法(2022.7.25) 前言 需求分析 一个Get实例 浏览器请求 SoapUI软件请求 一个Post实例 浏览器请求 SoapUI软件请求 1.Http简介( ...
最新文章
- 【转载】关于RabbitMQ的消息确认
- linux xz 解压initrd.img,2016-8-28 linux基础学习——压缩解压缩及归档 while脚本
- java静态变量和实例变量的区别6_java静态变量的与实例变量的区别
- js中bind、call、apply函数的用法
- 为什么说去中心化很重要
- ffmpeg rtp传输使用
- Linux多线程工作笔记0003---C语言中%p,%u,%lu都有什么用处
- Windows Phone 7 常用控件简介
- Flink1.6系列之—数据流编程模型
- SPSS常用方法及操作
- 企业微信hook,企业微信软件
- ssm高仿bilibili视频网站
- 工业机器人——机械手臂
- html5如何添加图片菜鸟教程,菜鸟入门教程 HTML5的常见用法
- 汉诺塔问题(非常简单明了的解析)
- 三种方法绘制单位圆-R语言
- 尺寸公差分析尺寸链计算软件:DTAS3D电机气隙案例
- 深入理解Java虚拟机到底是什么
- 病案编码员需要计算机的什么知识,病案编码员要怎么学习?
- linux第一块ide硬盘命名为,linux下硬盘分区
热门文章
- mingw64亲测有效版本,直接解压,无需安装
- 蓝牙规范-Vol 6:低功耗控制器 Part A 物理层规范
- Wide Deep Learning for Recommender Systems【论文记录】
- Flask框架详细教程
- python程序设计与算法基础江红答案_《Python程序设计与算法基础教程(第二版)》江红 余青松,第十一章课后习题答案...
- 他是国家的儿子 如不再优秀请原谅他
- numpy/pandas 10min了解pandas
- java新手知识第二周
- Matlab相机标定可能遇到的报错
- 电子商务格局下的营销未来