一 数据库事务的隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读这几类问题。

1. Read UnCommitted(读未提交)
最低的隔离级别。一个事务可以读取另一个事务并未提交的更新结果。2. Read Committed(读提交)
大部分数据库采用的默认隔离级别。一个事务的更新操作结果只有在该事务提交之后,另一个事务才可以的读取到同一笔数据更新后的结果。3. Repeatable Read(重复读)mysql的默认级别。整个事务过程中,对同一笔数据的读取结果是相同的,不管其他事务是否在对共享数据进行更新,也不管更新提交与否。4. Serializable(序列化)
最高隔离级别。所有事务操作依次顺序执行。注意这会导致并发度下降,性能最差。通常会用其他并发级别加上相应的并发锁机制来取代它。二 不同事务级别带来的并发问题1 脏读
脏读发生在一个事务A读取了被另一个事务B修改,但是还未提交的数据。假如B回退,则事务A读取的是无效的数据。这跟不可重复读类似,但是第二个事务不需要执行提交。

2 不可重复读
在基于锁的并行控制方法中,如果在执行select时不添加读锁,就会发生不可重复读问题。
在多版本并行控制机制中,当一个遇到提交冲突的事务需要回退但却被释放时,会发生不可重复读问题。

在上面这个例子中,事务2提交成功,它所做的修改已经可见。然而,事务1已经读取了一个其它的值。在序列化和可重复读的隔离级别中,数据库管理系统会返回旧值,即在被事务2修改之前的值。在提交读和未提交读隔离级别下,可能会返回被更新的值,这就是“不可重复读”。
有两个策略可以防止这个问题的发生:
(1) 推迟事务2的执行,直至事务1提交或者回退。这种策略在使用锁时应用。
(2) 而在多版本并行控制中,事务2可以被先提交。而事务1,继续执行在旧版本的数据上。当事务1终于尝试提交时,数据库会检验它的结果是否和事务1、事务2顺序执行时一样。如果是,则事务1提交成功。如果不是,事务1会被回退。
3 幻读
幻读发生在当两个完全相同的查询执行时,第二次查询所返回的结果集跟第一个查询不相同。
发生的情况:没有范围锁。

三 例子比较不可重复读和幻读1 不可重复读
不可重复读的重点是修改: 同样的条件, 你读取过的数据, 再次读取出来发现值不一样了
例子:
在事务1中,Mary 读取了自己的工资为1000,操作并没有完成
con1 = getConnection(); select salary from employee empId ="Mary";
在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.
con2 = getConnection(); update employee set salary = 2000; con2.commit();
在事务1中,Mary 再次读取自己的工资时,工资变为了2000
select salary from employee empId ="Mary";
在一个事务中前后两次读取的结果并不致,导致了不可重复读。 2 幻读
幻读的重点在于新增或者删除 (数据条数变化)。同样的条件, 第1次和第2次读出来的记录数不一样
例子:
目前工资为1000的员工有10人。
事务1,读取所有工资为1000的员工。
con1 = getConnection(); Select * from employee where salary =1000;
共读取10条记录
这时另一个事务向employee表插入了一条员工记录,工资也为1000
con2 = getConnection(); Insert into employee(empId,salary) values("Lili",1000); con2.commit();
事务1再次读取所有工资为1000的员工
select * from employee where salary =1000;
共读取到了11条记录,这就像产生了幻读。

一个事务中 可以查询自己未提交的数据吗_数据库事务相关推荐

  1. 一个事务中 可以查询自己未提交的数据吗_数据库事务的方方面面

    事务 是关系型数据的一个重要特性,但很少有人能对事务有全面性的了解,这篇文章就把事务的方方面面讲给你. 事务的概念 什么是事务 数据库事务(事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的 ...

  2. mysql 查询两个字段相同的数据_sql语句如何查询一个表中某两个字段的相同数据?...

    查询一个表中某两个字段的相同数据代码是:Select Name,ID From A group by Name,ID having count (*)>1. 结构化查询语言(Structured ...

  3. php模拟post提交json数据,如何在PHP中利用curl模拟post提交json数据

    如何在PHP中利用curl模拟post提交json数据 发布时间:2021-02-05 16:30:19 来源:亿速云 阅读:63 作者:Leah 本篇文章为大家展示了如何在PHP中利用curl模拟p ...

  4. mysql 事务原子性_数据库事务原子性、一致性是怎样实现的?

    先借用前辈的一句话:数据库事务有不同的隔离级别,不同的隔离级别对锁的使用是不同的,锁的应用最终导致不同事务的隔离级别. 隔离性分为四个级别: 1读未提交:(Read Uncommitted) 2读已提 ...

  5. dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  6. 列举MySQL事务的隔离级别_mysql dba系统学习(22)数据库事务详解

    上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉,基础不扎实啊. 下面来好好的学习哈mysql ...

  7. mysql事务并发控制_数据库 事务并发控制

    事务是一个逻辑工作单元, SQLServer 2005 提供了几种自动的可以通过编程来完成的机制,包括事务日志. SQL 事务控制语句,以及事务处理运行过程中通过锁定保证数据完整性的机制.当用户对数据 ...

  8. mysql事务的四大特性_数据库事务四大特性是什么?

    展开全部 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因e5a48de588b662616964757a686964616f3133336630376 ...

  9. Mybatis多参数封装到一个类中模糊查询

    1.创建QueryValueObject实体类 package com.william.domain;import org.omg.PortableInterceptor.USER_EXCEPTION ...

最新文章

  1. 传递函数极点与微分方程的解
  2. 专为设计师而写的GitHub快速入门教程
  3. 软件需求说明书文档格式
  4. linux deepin手动升级内核命令
  5. java 数据源调用_实战分享: Spring boot 调用之间实现动态数据源
  6. 计算剪贴板里仿制的代码行数
  7. cordova自定义插件步骤
  8. java 子类 继承父类的注解,spring使用注解通过子类注入父类的私有变量
  9. 大智慧c语言dll,易语言大智慧dll模板接口
  10. Jsoup爬虫获取公司纳税识别号
  11. 神级程序员都在用什么工具?【建议收藏】
  12. android 适配7.0,Android7.0适配心得(一)_拍照兼容
  13. java验证文件的完整性_JAVA中进行数据完整性验证
  14. 计算机网络学习 :互联网与万维网的区别
  15. 请求接口参数正确请求失败的问题
  16. 《实战网络营销 网络推广经典案例战术解》扫描版[PDF]
  17. 再记一次止于三面的阿里面试之旅,感觉内心是拔凉拔凉的
  18. NGS 数据过滤之 Trimmomatic
  19. Android 常用开源总结
  20. Protocol - Exploits学习笔记

热门文章

  1. android 勿扰模式代码,android机勿扰模式代码是什么
  2. java string能存储多长_String 有多长?
  3. opengl 实时波形显示_OpenGL1------OpenGL概述
  4. 删除用户账号的命令 mysql_【Mysql】常用指令之——用户操作(创建,授权,修改,删除)...
  5. android 代码水印,Android实现为图片添加水印
  6. java非负数校验_JavaScript正则表达式校验非负整数实例
  7. 同等质量下那种图片格式小_最实用的Window小工具合集,总有一款适合你!
  8. oracle 12c pdb开启和关闭,及设置开机自启动
  9. Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)
  10. thymeleaf中的th:remove用法