1.事务特性ACID

1.1.原子性Atomicity

原子性:

  • 事务的所有操作,要么全部执行,要么全部不执行,不存在部分执行成功的情况。
  • 如果执行过程中出错,则应该回滚rollback到事务开始前的状态。
  • 事务是一个不可分割的整体。

1.2.一致性Consistency

一致性:事务执行完成之后,数据应该满足完整性约束。

举例:事务执行前A、B的存款都是100,事务内容是A转账B,则事务执行完成之后,需要满足A和B的存款和还是200。

1.3.隔离性Isolation

隔离性:不用的事务之间互不干扰。

隔离级别:关于数据的隔离性,MySql提供了四种级别,后文详细说明。

1.4.持久性Duration

持久性:事务一旦提交,则对数据库中数据的改变会是永久性的,即便数据库系统遇到故障也不会丢失。

2.并发读: 脏读、不可重复读、幻读

如果不对事务进行隔离性的保障,则在多个事务并发进行时,可能出现:脏读、不可重复读、幻读。

2.1.脏读

脏读:一个事务处理过程中,读取了另一个事务还未提交的数据。

举例:

  1. money = 0.
  2. 事务A、B开启。
  3. 事务A将money修改为100,但还未提交
  4. 事务B执行money = money + 100,将money修改为200。
  5. 事务A回滚,事务B提交。
  6. 异常:经过一次自增100的操作,money却增加了200,好懵!!

重点:针对还未提交的数据。

2.2.不可重复读

不可重复读:一个事务处理过程中,对同一数据的多次查询得到不同的结果,这是由于另一个事务在多次查询间隔修改了这个数据。

举例:

  1. money = 0。
  2. 事务A、B开启。
  3. 事务B第一次读取money = 0。
  4. 事务A修改money为100,然后提交
  5. 事务B第二次读取money = 100。
  6. 异常:在同一个事务中,对money的两次读取,结果不同,好懵!!

重点:针对被修改已提交的数据。

2.3.幻读

幻读:一个事务处理过程中,读取了另一个事务新增加删除的数据。

举例:

  1. 表中共计10条记录。
  2. 事务A、B开启。
  3. 事务B第一次count,获悉count(id) = 10。
  4. 事务A新增了2条记录,删除了一条记录,然后提交
  5. 事务B第二次count,获悉count(id) = 11。
  6. 异常:在同一个事务中,对表中数据总条数的两次统计,结果不同,好懵!!

重点:针对新增删已提交数据。

三、四种事务隔离级别

MySql提供了四种事务隔离级别,从低到高依次是:读未提交、度已提交、可重复度、串行化。

3.1.读未提交Read Uncommitted

  • 简单理解:一个事务可以读取Read到其他事务未提交Uncommitted的数据。
  • 解决的并发事务问题:最低级别,无法解决任务问题。
  • 未解决的并发事务问题:脏读、不可重复读、幻读。

3.2.读已提交 Read Committed

  • 简单理解:一个事务需要读取Read到其他事务已经提交Committed的数据。
  • 解决的并发事务问题:因为已提交的保证,能够避免脏读的出现。
  • 未解决的并发事务问题:不可重复读、幻读。

3.3.可重复读Repeatable Read

  • 简单理解:一个事务能够对同一记录进行重复性的Repeatable读取Read,多次读取结果一致。
  • 解决的并发事务问题:不可重复读、脏读。
  • 未解决的并发事务问题:幻读
  • 特别:MySql的默认事务隔离级别

3.4.串行化Serializable

  • 简单理解:多个事务以串行化Serializable的方式运行,自然不会产生并发事务问题。
  • 解决的并发事务问题:幻读、不可重复读、脏读。
  • 特别:效率特别低。

3.5.三种并发读与四种事务隔离级别的总结

隔离级别 脏读 不可重复读 幻读
读未提交 未解决 未解决 未解决
读已提交 解决 未解决 未解决
可重复读 解决 解决 未解决
串行化 解决 解决 解决

3.6.隔离级别的查看与设置

3.6.1.查看

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.03 sec)

3.6.2.mysql设置

mysql> set tx_isolation='read-committed';
Query OK, 0 rows affected (0.01 sec)mysql> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.01 sec)

3.6.3.java设置

注意:在开启事务之前,设置事务隔离级别。

//获取连接
Connection conn = getConnect();//设置事务隔离级别
conn.setTrasactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//开启事务
conn.setAutoCommit(false);

MySql: 事务特性ACID、三大并发读、四种事务隔离级别相关推荐

  1. 数据库的四种事物隔离级别(基于MySQL的InnoDB存储引擎)

    准备工作 创建一个表,并插入几条基础数据 CREATE TABLE `transaction_isolation` (`id` bigint(10) NOT NULL AUTO_INCREMENT,` ...

  2. 数据库四种事务隔离级别详解

    四种数据库隔离级别及解决的数据问题如下所示: 1.READ-UNCOMMITTED(读取未提交内容) 由于在该隔离级别下即使事务未提交所做的修改也会对其他事务产生影响.所以该级别会出现数据脏读的发生. ...

  3. MySQL 事务 :ACID、并发带来的问题、事务的隔离级别、事务的实现

    文章目录 ACID 原子性 一致性 持久性 隔离性 并发带来的隔离问题 幻读(虚读) 不可重复读 脏读 丢失更新 隔离级别 Read Uncommitted (读未提交) Read Committed ...

  4. Mysql有四种事务隔离级别,详解脏读、不可重复读、幻读

    Mysql的事务隔离级别 Mysql有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读.不可重复读.幻读的问题. 脏读 大家看一下,我们有两个事务,一个是 Transact ...

  5. mysql四种事务级别_【MySQL 知识】四种事务隔离级别

    摘要:本篇文章主要是为了对MySQL的四种事务隔离级别的介绍.为了保证数据库的正确性与一致性,数据库事务具有原子性(Atomicity).一致性(Consistency).隔离性(Isolation) ...

  6. 关于MySQL的四种事务隔离级别!

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不 ...

  7. mysql四种事务隔离级别

    mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...

  8. mysql四种输入_mysql四种事务隔离级别

    mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...

  9. mysql 事务 隔离级别_MySQL的四种事务隔离级别

    https://www.cnblogs.com/huanongying/p/7021555.html 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的 ...

  10. SpringCloud工作笔记054---事物处理_MySQL的四种事务隔离级别_以及修改Mysql默认隔离级别

    JAVA技术交流QQ群:170933152 Mysql修改默认隔离级别: MySQL mysql默认的事务处理级别是'REPEATABLE-READ',也就是可重复读 1.查看当前会话隔离级别 sel ...

最新文章

  1. android ndk mac安装成功,Mac下Android Studio NDK 环境搭建并运行
  2. 【JavaScript】核心语法之数组
  3. ARM非对齐操作异常解决过程
  4. Timer和TimerTask类 例子 .
  5. AngularJs入门学习
  6. 一开机就提示脱机工作_「华为手机维修自学教程」华为手机的开机触发电路 华为维修技巧...
  7. oracle 11g jdbc jar包在哪个文件目录
  8. EF6 Codefirst+MySql 数据库迁移
  9. C语言编程轰炸,C语言实现数字炸弹小游戏
  10. 锐捷交换机常用命令速查
  11. 《MarkDown编辑器的使用技巧(修改录入方式与目录生成)|CSDN编辑器测评》
  12. 深度卷积神经网络最新进展综述
  13. window设置oracle sid,window下改oracle_sid
  14. inv在线计算机,INV3062A
  15. c语言小程序飞机大战,飞机大战微信小游戏:经典像素飞机大战小程序,点开即玩...
  16. 阿里云ACP/ACE认证考试指南
  17. 微软CEO鲍尔默10大经典语录
  18. python安装arcpy_为arcpy安装pip
  19. 基于Spring+SpringMvc+Mybatis开发javaWeb汽车维修管理系统
  20. 软件工程慕课答案 第七周 面向对象分析

热门文章

  1. 数据仓库实施步骤与关键成功因素
  2. 计算机无法设置ip地址,如何解决Windows8无法设置静态IP地址的问题
  3. 下载神器aria2的yaaw WebUI用法
  4. 阿里云无影云桌面工作区详解
  5. 黑马程序员—选择黑马,是我前进的方向
  6. SQL 当天在当月、当季度、当年的时间进度
  7. 《老路用得上的商学课》66-70学习笔记
  8. hive3.1.2 分布式安装 (基于hadoo3.1.3+spark)
  9. JavaScript系列之while循环
  10. 分区容错性和可用性的区别