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

java事务四中隔离级别_事务的四种隔离级别

数据库四大特性:

原子性:要么全部执行,要么全部回滚。

一致性。“确保一致性是用户的责任,而不是DBMS。”,“DBMS假定每个事务都保持一致性”。数据库和数据管理员通过其他三个特性来保证一致性。即是:从一正确的状态转换到另一个正确的状态

隔离性:一个事务在另外一个事务完成后或者完成前完成。

持久性:物理化信息。

1,读未提交,Read Uncommited。

指的是一个事务读取到另外一个事务还没有提交的内容。这种情况是必须要避免的。因为其他事务未提交的数据,是随时有可能进行回滚的,所以,任何时候,都不应该允许程序读取到某个事务还未提交的数据。如果读取到了别的事务未提交的数据,这种情况称为脏读。要想解决脏读的问题,可以提高数据库的事务隔离级别,把事务隔离级别设置为读已提交。

2,读已提交,Read Committed。

这个隔离级别可以解决脏读的问题。

在该隔离级别下,允许在一个事务执行的过程中,另外一个事务得到执行并提交。这样,会出现一种情况,第一个事务前后两次select出来的某行数据,值可能不一样。值改变的原因是,穿插执行的事务2对该行数据进行了update操作。在同一个事务中,两次select出来的值不相同的问题称为不可重复读问题。要想解决不可重复读问题,需要把数据的隔离级别设置为可重复读。

3,可重复读。Repeatable Read。

在这个隔离级别下,可以解决不可重复读的问题。

在该隔离级别下,在一个事务使用某行的数据的过程中,不允许别的事务再对该行数据进行操作。可重复读应该是给数据库的行加上了锁。这种隔离级别下,依旧允许别的事务在该表中插入和删除数据,于是就会出现,在事务1执行的过程中,如果先后两次select出符合某个条件的行,如果在这两次select直接另一个事务得到了执行,insert或delete了某些行,就会出现先后两次select出来的符合同一个条件的结果不一样,第一次select好像出现了幻觉一样,因此,这个问题也被成为幻读。要想解决幻读问题,需要将数据库的隔离级别设置为串行化。

4, 串行化,Serialization。

串行化可以解决幻读的问题。

它要求事务的执行完全串行执行。所以失去了并发的效率。

Mysql的默认隔离级别为可重复读。

总结而言,数据的事务隔离级别分为4种,从低到高依次为读未提交,读已提交,可重复读,串行化。与数据库事务隔离级别相关的问题有3个,分别是脏读,不可重复读,幻读。脏读问题需要用读已提交来解决,但读已提交会存在不可重复读问题。不可重复读问题需要用可重复读来解决,但可重复读会存在幻读问题。幻读问题需要用串行化来解决。

————————————————

版权声明:本文为CSDN博主「bugcoder321」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/li_canhui/article/details/83058068

相关文章:

  • mysql 管理端口_MySQL MySQL 8.0新特性 — 管理端口 _好机友
  • java 使用流传图片_java使用Thumbnailator操作图片
  • 如何修改java运行环境版本_安卓修改大师配置Java运行环境的具体操作方法
  • mysql怎么删除归档日志_Oracle 归档开启切换和归档日志删除(单实例和RAC)
  • java两个list快速匹配优化_[优化] 两个ArrayListObject,匹配出Object中某个属性相等的方案。...
  • java算法提高求最大值_算法提高 求最大值
  • cnpm安装 指定版本_vue npm install安装某个指定版本的方法
  • ftp linux 推送文件_技术|如何在命令行中使用 ftp 命令上传和下载文件
  • java libjli.so_jConsole,jvisualvm和jmap使用
  • java 递归求二进制_用于二进制搜索的Java程序(递归)
  • php 计划任务 打开网页_服务器定时执行计划任务,定时访问页面(windows/linux)
  • php mvc,php mvc是什么
  • 如何修改php代码格式,php修改时间格式的代码
  • php datatable 值判断,C#_比较2个datatable内容是否相同的方法,DataTable可以通过RowStatus来判断 - phpStudy...
  • 新浪微博源码 php,查看源代码