MySQL事务详解

一:什么是事务

事务:简单来说就是一组操作要么全部成功,要么全部失败,没有中间状态,

最常见的例子就是转账:小黑给小黄转账100快,如果只是小黑的账户减少100块,小黄的账户余额不增加,你觉得合理吗?
所以事务就是要么都成功,要么都失败

二:事务的特性(ACID)

1.原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2.一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一数据的读取结果是相同的;
3.隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
4.持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

三:脏读、丢失修改、不可重复读、幻读

1.脏读(Dirty read):读未提交,当一个事务A读取并修改一个数据,且没提交到数据库,但这个数据恰好被另一事务B读取,事务B读取的这个数据可能不是最终需要提交的数据,事务B拿着这个数据去做一些操作可能会出错;
2.丢失修改(Lost to modify):当一个事务A读取了一个数据后,事务B也读取了该数据,当事务A修改了这个数据之后,事务B也修改了该数据,事务A的修改被事务B的修改所覆盖,如事务A读取a=100,对其进行操作减去20,事务A提交之后a=80,当时事务B对a的操作是增加20,那么事务B提交之后a=120,事务A的修改被事务B所覆盖;
3.不可重复读(Unrepeatable Read):事务A在同一次事务中需要多次读取同一数据a,在事务A多次读取数据的间隙中事务B修改了数据a,导致事务A读取的数据不一致;
4.幻读(Phantom Read):幻读和不可重复读差不多,事务a读取了几行数据,事务B突然插入了几条数据,事务a重新读取时发现多了几条原本不存在的数据;

不可重复读的重点是修改:多次读取同一条记录发现其中某些列的值被修改;幻读的重点在于新增或者删除:多次读取发现记录增多或减少了。

三:事务的隔离级别
数据库定义了四种隔离级别,如下所示:

1:读未提交(READ-UNCOMMITTED):最低的隔离级别,允许读取尚未提交的数据变更, 可能会导致脏读、幻读或不可重复读。
2:读已提交(READ-COMMITTE):读取并发事务已经提交的数据, 可以阻止脏读,但是幻读或不可重复读仍有可能发生。
3:可重复读(REPEATABLE-READ):对同一字段的多次读取结果都是一致的,除非数据是被本身事务所修改, 可以阻止脏读和不可重复读,但幻读仍有可能发生。
4:串行化(SERIALIZABLE):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰, 该级别可以防止脏读、不可重复读以及幻读。

MySQL InnoDb的默认级别是可重复读!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 事务特性ACID 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1 原子性(Atomic...
    Q南南南Q阅读 4,427评论 0 0
  • 事务详解 注意:MyISAM 不支持事务,InnoDB支持事务,所以所有关于事务, 隔离级别,排它锁, 共享锁, ...
    大富帅阅读 7,806评论 1 2
  • 数据库事务 1.1数据库版本 Mysql8.0.12 1.2事务是由一组SQL语句组成的逻辑处理单元,事务具有以下...
    左洁阅读 1,616评论 0 0
  • 1.事务的四大特性(AUID) 1.1原子性(Atomicity) 执行一条命令,或者多条命令,要么全部成功,要么...
    IT奔跑的小特阅读 1,531评论 0 1
  • 事务 什么是事务?维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由 一个有限的数据库操...
    WEIJAVA阅读 5,123评论 0 7

友情链接更多精彩内容