事务的隔离界别

  事务的ACID特性:

  1、Atomicity原子性  事务操作的不可分割性,要么全部执行,要么回滚。

  2、Consistency一致性  数据库在事务处理前后处于的一致性状态。如银行转账,两个账户转账前的状态和转账后的状态必须一致。

  3、Isolation隔离性 同一时刻执行多个事务,一个事务的执行不能被其他事务干扰。

  4、Durability持久性 持久性指一旦成功执行,在系统中产生的所有变化将是永久的。

  事务的隔离级别是事务并发控制的整体解决方案,是综合利用各种类型的锁机制解决并发问题的整体解决方案

  首先了解一下常见的并发问题:

  1、脏读:一个事务可以读到另一个事务未提交的数据,违背了事务的隔离性原则。

  2、不可重复读:同一个事务内,两条相同的查询语句的查询结果不一致。

  3、幻读:屏蔽了对其他用户修改数据的查询,等到提交时发现出错了。

  这三个并发问题的出现都是在前一问题的基础之上发生的,

  比如,脏读问题可以这样理解,客户A从数据库读取数据行到内存并修改,但是还没有提交,此时客户B也要读取这一行,但是这个读取是在内存中读取的客户A未提交的数据

      不可重复读是在解决了脏读的情况下,不再读取未提交的数据,而是从数据库中直接读取已经提交的数据,但是这样会在同一事务中产生一个问题,就是两次查询的结果可能不一致,比如第一次查询在客户端提交前,第二次查询在客户端提交后,结果这两次查询结果不一致。

     幻读问题是在解决了不可重复读问题的前提下,即同一事务中重复查询的结果一致,但是这又会产生新的问题,比如第一次查询是否存在某个用户,假设不存在,此时客户B插入这个用户,此时这个事务的隔离界别是可重复读,那么再次查询这个用户肯定还是不存在,但是此时数据库中已经存在了这个用户,客户A再次插入的话必然会产生duplicate错误。

  为了解决这些并发问题,SQL定义了四种隔离级别:

  read uncommitted(读取未提交的数据)    可能存在  以上三种问题

  read commited 读取提交的数据    解决了脏读问题   但是存在不可重复读和幻读

  repeated read 可重复读      解决了脏读和不可重复读,但是存在幻读现象

  serializable 串行化    解决了脏读,不可重复读和幻读现象,但是发生了锁等待现象,降低了事务间的并发访问性能。

转载于:https://www.cnblogs.com/maydow/p/4897072.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员福利各大平台免费接口非常适用

电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIdsJ_商品ID&type1 ps:商品ID这么获取:http://item.jd.com/954086.html 物流接口 快递接口: http://www.kuaidi100.com/query?type快递公司代号&postid快递单号 ps:快递公司编码:申通”shentong”…

WriteN, RTMP send error

WriteN, RTMP send error 32 (133 bytes) WriteN, RTMP send error 32 (49 bytes) WriteN, RTMP send error 9 (42 bytes)现象: 推流失败,srs服务出错。 原因 视频流较慢,音频流较快。 复现 视频解码得到帧数据,用异步接口处…

样式公用代码

/************** bug ************/.clearfix:after {content:""; display:block; height:0px; clear:both; overflow:hidden;}.clearfix {display:inline-block;}.clearfix {display:block;} /************** 公共用 ************/html {overflow:-moz-scrollbars-v…

即时聊天IM之二 openfire 整合现有系统用户

合肥程序员群:49313181。 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojitqq.com 综述: 每天利用中午时间更新下这个知识点的的博客如果感兴趣的觉得更新慢了也别介意(其它时间还是…

cannot convert ‘_IO_FILE*’ to ‘const char*

错误代码 #ifdef NDEBUG#define DBUG_PRINT(fmt, ...) #else#define DBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #endifBUG_PRINT(stderr, "decode %s does not support device type cuda.\n", dec->name);修改 BUG_PRINT("decode %s does not supp…

找出数组中前K大的值

将数组划分为两部分&#xff0c;前K项为前K大值的集合&#xff0c;无需有序。 while(true) {int flag nums[k];while(i < k && nums[i] > flag) {i;}while(j>k && nums[j] < flag) {j--;}if (i j || nums[i] nums[j]) {break;}int tmp nums[i]…

C#在ASP.NET4.5框架下的首次网页应用

运行效果预览: 先看实践应用要求: 1&#xff0e;编写一个函数&#xff0c;用于计算1&#xff01;2&#xff01;3&#xff01;4&#xff01;5&#xff01;&#xff0c;在控制台或页面输出运行结果。 2&#xff0e;在控制台或页面输出九九乘法表。 3&#xff0e;输入10个以内的整…

javascript的变态位运算

javascript的变态位运算 var a "10" | 0; alert(a); alert (typeof a);结果为10,number。 这就是说这条语句可以将字符串转化为number。 如果&#xff1a;var a "sss" | 0;alert(a);结果为0.parseInt("sss")的话&#xff0c;会返回NaN。这个太…

CUDA: OpenCV requires enabled ‘cudev‘ module from ‘opencv_contrib

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.X.X.zip unzip opencv_contrib.zip cmake -D OPENCV_EXTRA_MODULES_PATH~/opencv_contrib-4.X.X/modules参考

Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解...

转 一、介绍 Android-Universal-Image-Loader是 一个开源的UI组件程序&#xff0c;该项目的目的是提供一个可重复使用的仪器为异步图像加载&#xff0c;缓存和显示。所以&#xff0c;如果你的程序里需要这个功能的话&#xff0c;那么不妨试试它。 因为已经封装好了一些类和方法…

营销类文章 SEO

如何有效的推广网站 适合没钱的中小站长 唐世军 a5总经理 博客 门户网站广告报价—以新浪为例 贵的一天30多万 碧蓝天营销学院 网络营销&#xff0c;你真的了解吗&#xff1f; SEO工具mozBar介绍、友情链接新参考mozRank 谈谈网络推广团队每天工作流程、工作标准、考核 请问安卓…

显示 grep 结果的指定行

用grep查找特定关键字&#xff0c;结果很多&#xff0c;但是有用的在中间的某几行&#xff0c;即grep得到结果之后再次过滤出指定几行。 首先查找指定行 grep -a "X" filename | grep -an "X"记下指定行&#xff0c;然后用awk打印指定行 grep -a "…

Java小知识

内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。(1)、内部类仍然是一个独立的类&#xff0c;在编译之后内部类会被编译成独立的.class文件&#xff0c;但是前面冠以外部类的类名和$符号。(2)、内部类不能用普通的方式访问。成员变量成员变量静态成员变量。List遍…

C++ 设置线程名字

使用 std::thread #include <thread> #include <pthread.h>std::thread t(funs, args); pthread_setname_np(t.native_handle(), threadName);通过 pthread_create 创建 #define _GNU_SOURCE #include <pthread.h>pthread_t tid; pthread_create(&ti…

java学习_File属性处理

// TODO Auto-generated method stub File filenew File("newhello.txt"); //文件是否存在 System.out.println("文件是否存在&#xff1a;"file.exists()); //读取文件名称 System.out.println("读取文件名&#xff1a;"file.getName()); //读取…

pytest 基础讲解

文章目录 一、前置说明二、操作步骤1. 安装 pytest2. python 编写测试用例3. 在 pycharm 中使用 pytest 运行测试用例1)执行单条用例:点击用例前面的三角形执行,或在用例内部点击右键2)执行多条用例:在测试用例的外部区域,点击右键,批量执行所有用例4. 命令行中使用 pyt…

Myeclipse8.6中安装SVN插件

方法一&#xff1a; 1.打开HELP->MyEclipse Configuration Center&#xff0c;切换到SoftWare标签页。   2.点击Add Site 打开对话框&#xff0c;在对话框Name输入Svn&#xff0c;URL中输入&#xff1a;http://subclipse.tigris.org/update_1.6.x   3.在左边栏中找到Per…

初识EL

一、EL函数库介绍 由于在JSP页面中显示数据时&#xff0c;经常需要对显示的字符串进行处理&#xff0c;SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。  这些EL函数在JSTL开发包中进行描述&#xff0c;因此在JSP页面中使用SUN公司的EL函数库&#xff0c;需要导入…

ffmpeg 合并 flv 文件

// 转ts char cmd[1024] {\0}; sprintf(cmd, "ffmpeg -i %s -loglevel quiet -c copy -bsf:v h264_mp4toannexb -f mpegts %s", lastFlvFile.c_str(), lastTsFile.c_str()); system(cmd);// 合并ts char cmd[1024] {\0}; sprintf(cmd, "ffmpeg -i concat:\&qu…

怎么样的理解才是完全理解SQL(二)

如果我们从集合论&#xff08;关系代数&#xff09;的角度来看&#xff0c;一张数据库的表就是一组数据元的关系&#xff0c;而每个 SQL 语句会改变一种或数种关系&#xff0c;从而产生出新的数据元的关系&#xff08;即产生新的表&#xff09;。我们学到了什么&#xff1f;思考…