回归一下事务的四大特性ACID

1、原子性(Atomicity)

事务开始后所有操作,要么全部做完,要么全部不做。事务是一个不可分割的整体。事务在执行过程中出错,会回滚到事务开始之前的状态,以此来保证事务的完整性。类似于原子在物理上的解释:指化学反应不可再分的基本微粒,原子在化学反应中不可分割 。

2、一致性(Consistency)

事务在开始和结束后,能保证数据库完整性约束的正确性即数据的完整性。比如经典的转账案例,A向B转账,我们必须保证A扣了钱,B一定能收到钱。个人理解类似于物理上的能量守恒。

3、隔离性(Isolation)

事务之间的完全隔离。比如A向一张银行卡转账,避免在同一时间过多的操作导致账户金额的缺损,所以在A转入结束之前是不允许其他针对此卡的操作的。

4、持久性(Durability)

事务的对数据的影响是永久性的。通俗的解释为事务完成后,对数据的操作都要进行落盘(持久化)。事务一旦完成就是不可逆的,在数据库的操作上表现为事务一旦完成就是无法回滚的。

事务并发问题

1、脏读

又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。

例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的就是脏数据。

2、不可重复读

同一个事务中,多次读出的同一数据是不一致的。

例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

3、幻读

不好表述直接上例子吧:

在仓库管理中,管理员要给刚到的一批商品进入库管理,当然入库之前肯定是要查一下之前有没有入库记录,确保正确性。管理员A确保库中不存在该商品之后给该商品进行入库操作,假如这时管理员B因为手快将已将该商品进行了入库操作。这时管理员A发现该商品已经在库中。就像刚刚发生了幻读一样,本来不存在的东西,突然之间他就有了。

注:三种问题看似不太好理解,脏读侧重的是数据的正确性。不可重复度侧重的于对数据的修改,幻读侧重于数据的新增和删除。

mysql四种事务的隔离级别

隔离级别 脏读        不可重复度 幻读     
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
可串行化(serializable)

最新文章

  1. JDBC 练习
  2. css3中transition和display的坑
  3. SeleniumIDE从0到1 (Selenium IDE 安装)
  4. wamp下php无法保存SESSION问题总汇
  5. java web sql注入测试(1)---概念概述
  6. javascript获取以及设置光标位置
  7. MVC 菜鸟学习记录2
  8. 【php】对PHPExcel一些简单的理解
  9. python面向对象【进阶篇】
  10. 自己写的驱动用CreateFile打开时错误码返回1的问题
  11. 轻松掌握VS Code开发.Net Core及创建Xunit单元测试
  12. JEECG BOOT
  13. pydemo_testMaopuSpider
  14. mysql 字段指定值靠前排序方法,多字段排序排序方法
  15. JAVA程序设计 实验一报告
  16. html5新添加的表单类型和属性
  17. ioncube
  18. leetcode530
  19. 用一个二维码做下载地址,自动区分是 ios 还是 android
  20. hadoop之 hadoop用途方向

热门文章

  1. ccf-csp 任务调度,回溯算法我觉得ok神**wa了
  2. HttpClient apache上篇
  3. Mongodb数据库(linux)——基础操作
  4. 基于Flask框架搭建视频网站的学习日志(六)之数据库
  5. linux mint使用中的问题解决记录
  6. ZZJ_淘淘商城项目:day02(淘淘商城01 - 项目讲解、环境搭建)
  7. 第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】
  8. Debian8.8下的VIM的配置文件
  9. Linux 进程信号量
  10. SpringBoot 1.5.x 集成 Quartz 任务调度框架