事务的特性:ACID

我刚才提到了事务的特性:要么完全执行,要么都不执行。不过要对事务进行更深一步的理解,还要从事务的 4 个特性说起,这 4 个特性用英文字母来表达就是 ACID。

  • A,也就是原子性(Atomicity)。原子的概念就是不可分割,你可以把它理解为组成物质的基本单位,也是我们进行数据处理操作的基本单位。
  • C,就是一致性(Consistency)。一致性指的就是数据库在进行事务操作后,会由原来的一致状态,变成另一种一致的状态。也就是说当事务提交后,或者当事务发生回滚后,数据库的完整性约束不能被破坏。
  • I,就是隔离性(Isolation)。它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。也就是说一个事务在提交之前,对其他事务都是不可见的。
  • 最后一个 D,指的是持久性(Durability)。事务提交之后对数据的修改是持久性的,即使在系统出故障的情况下,比如系统崩溃或者存储介质发生故障,数据的修改依然是有效的。因为当事务完成,数据库的日志就会被更新,这时可以通过日志,让系统恢复到最后一次成功的更新状态。

ACID 可以说是事务的四大特性,在这四个特性中,原子性是基础,隔离性是手段,一致性是约束条件,而持久性是我们的目的。

事务的常用控制语句

START TRANSACTION 或者 BEGIN,作用是显式开启一个事务。
COMMIT:提交事务。当提交事务后,对数据库的修改是永久性的。
ROLLBACK 或者 ROLLBACK TO [SAVEPOINT],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
SAVEPOINT:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
RELEASE SAVEPOINT:删除某个保存点。
SET TRANSACTION,设置事务的隔离级别。

事务并发处理可能存在的异常都有哪些

  1. 脏读:读到了其他事务还没有提交的数据。
  2. 不可重复读:对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。这是因为有其他事务对这个数据同时进行了修改或删除。
  3. 幻读:事务 A 根据条件查询得到了 N 条数据,但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候发现会有 N+M 条数据,产生了幻读

事务隔离的级别有哪些?

解决异常数量从少到多的顺序(比如读未提交可能存在 3 种异常,可串行化则不会存在这些异常)决定了隔离级别的高低,这四种隔离级别从低到高分别是:读未提交(READ UNCOMMITTED )、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和可串行化(SERIALIZABLE)。这些隔离级别能解决的异常情况如下表所示:

你能看到可串行化能避免所有的异常情况,而读未提交则允许异常情况发生。
关于这四种级别,简单讲解下。

  • 读未提交,也就是允许读到未提交的数据,这种情况下查询是不会使用锁的,可能会产生脏读、不可重复读、幻读等情况。
  • 读已提交就是只能读到已经提交的内容,可以避免脏读的产生,属于 RDBMS 中常见的默认隔离级别(比如说 Oracle 和 SQL Server),但如果想要避免不可重复读或者幻读,就需要我们在 SQL 查询的时候编写带加锁的 SQL 语句(我会在进阶篇里讲加锁)。
  • 可重复读,保证一个事务在相同查询条件下两次查询得到的数据结果是一致的,可以避免不可重复读和脏读,但无法避免幻读。MySQL 默认的隔离级别就是可重复读。
  • 可串行化,将事务进行串行化,也就是在一个队列中按照顺序执行,可串行化是最高级别的隔离等级,可以解决事务读取中所有可能出现的异常情况,但是它牺牲了系统的并发性。

实际操作模拟:

#查看事务隔离级别
SHOW VARIABLES LIKE 'transaction_isolation';
#设置隔离级别为读未提交
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
#查看自动提交开关
SHOW VARIABLES LIKE 'autocommit';
#关闭自动提交
set autocommit=0;

(后续补充脏读、可重复读、幻读demo)

mysql事务特性及四种隔离级别相关推荐

  1. MySQL 事务 | ACID、四种隔离级别、并发带来的隔离问题、事务的使用与实现

    文章目录 事务 ACID 并发带来的隔离问题 幻读(虚读) 不可重复读 脏读 丢失更新 隔离级别 Read Uncommitted (读未提交) Read Committed (读已提交) Repea ...

  2. MySQL(六)事物(ADID,四种隔离级别)(七)索引(索引测试,原则)

    6-事物 文章目录 6-事物 1,执行事物 2,模拟事务 3,事务的四种隔离级别 7-索引 7.1, 索引的分类 7.2,测试索引 插入100万数据 测试查询耗时 7.3,索引原则 事务原则:ACID ...

  3. 4种事务特性,5种隔离级别,7种传播行为

    去面试,面试官问,说一下spring事务的几种隔离级别,你项目用的是哪个.一脸茫然,之后...... 什么是事务? 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务 ...

  4. 不属于mysql事物的特性_mysql基础---事务 事务的四大特性(ACID) 四种隔离级别

    一.事务 mysql中,事务是一个最小的不可分割单元.事务能够保证一个业务的完整性. eg:银行转账 a -> -100 update user set money=money-100; b - ...

  5. mysql事务的acid、三种并发问题与四种隔离级别

    这里写目录标题 事物的ACID 事物并非下所引发的三种问题 以MYSQL数据库来分析四种隔离级别 mysql相关操作 Spring事物的传播行为 事物的ACID 事务是一个不可分割的数据库操作序列,是 ...

  6. mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别

    1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...

  7. 什么是事务、事务的四个特性ACID、不考虑隔离性会导致的三个问题、四种隔离级别

    什么是事务.事务的四个特性ACID.不考虑隔离性会导致的三个问题.四种隔离级别 1 什么是事务 2 事务的四大特性ACID 2.1 原子性 2.2 一致性 2.3 隔离性 2.4 持久性 3 不考虑隔 ...

  8. 这一篇让你真正理解Mysql的四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  9. 温故而知新:MySQL 四种隔离级别,你还对答如流吗?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 游泳的石头 来源 | https://www.jianshu.com/p/8d73 ...

最新文章

  1. WSL与Windows交互实践
  2. 建立实体-关系模型3
  3. log4j2 异步日志
  4. link 和 @import 的区别
  5. so easy(2019徐州icpc网络赛B)
  6. C#环境下的钩子详解
  7. CodeForces - 372CWatching Fireworks is Fun+DP+单调队列优化
  8. DLog-M什么意思
  9. CUDA memory
  10. 华为笔试题 字符串解压缩(C语言解法)
  11. 基于anbox的云游戏技术简介
  12. echarts 环形图 不同区域背景色自定义
  13. sql2005 查询分析器 自动换行
  14. c语言实验报告中致谢词,实验报告致谢词范文
  15. jump-game(跳跃游戏)
  16. MySQL开启定时任务
  17. 直流电机,伺服电机和步进电机的区别
  18. 在windows环境下安装pycocotools
  19. 如何采用陷阱方式钩住API
  20. swift27个开元第三方库

热门文章

  1. mes系统故障_精诚mes常见问题解答
  2. 数据库300G左右备份方案
  3. Oracle数据库迁移到MySQL数据库
  4. [从头学绘画] 第16节 六十四式八卦掌 (33-40)
  5. Vue的消息弹框换行问题
  6. 在java中给数组赋值,java中给数组赋值的方法
  7. 即刻APP 产品分析和一点感悟
  8. 区块链基础:散列法 (Hashing)
  9. Linux中同步数据之scp VS rsync
  10. 遇到无法重现的BUG?两个开源免费录屏工具帮你重现测试过程