Mysql事务四个特征(ACID)

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),这些特性通常简称为ACID。
●原子性:事务是一个完整的操作,事务的各步操作(各元素)是不可分的最小操作单位,要么都执行,要么都不执行要么全部完成,要么全部不完成
●一致性:当事务完成时,数据必须处于一致状态。
●隔离性:对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,他不应以任何方式依赖于或影响其他事务。,可设置隔离级别
● 持久性:事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的。
事务四特性简述:
原子性
是不可分割的最小操作单位,要么同时成功,要么同时失败。
持久性
当事务提交或回滚后,数据库会持久化的保存数据。
隔离性
多个事务之间。相互独立。
一致性
事务操作前后,数据总量不变
隔离级别
事务隔离级别
会出现问题
读未提交( Read Uncommitted)
脏读、幻读、不可重复读
读已提交( Read Committed)
幻读、不可重复读
可重复读( Repeatable Read)
不可重复读
串行化( Serializable)
不会产生任何问题、但是效率极低,会锁表
并发情况下事务引发的问题
—般情况下,多个单元操作并发执行,会出现这么几个问题
  • 不可重复读的重点是修改: 同样的条件, 你读取过的数据, 再次读取出来发现值不一样了
  • 幻读的重点在于新增或者删除 (数据条数变化)。同样的条件, 第1次和第2次读出来的记录数不一样
  • 脏读发生在一个事务A读取了被另一个事务B修改,但是还未提交的数据。假如B回退,则事务A读取的是无效的数据。这跟不可重复读类似,但是第二个事务不需要执行提交。 
简述:
  • 脏读︰A事务还未提交,B事务就读到了A事务的结果。(破坏了隔离性〕
  • 不可重复读∶A事务在本次事务中,对自己未操作过的数据,进行了多次读取,结果出现了不一致或记录不存在的情况。(破坏了一致性,update和delete )
  • 幻读:A事务在本次事务中,对自己未操作过的数据,进行了多次读取,第一次遗取时,记录不存在,第二次读取时,记录出现了。〔破坏了一致性,insert )
事务本身其实并不包含这四个特性,我们需要通过某些手段,尽可能的让这个执行单元满足这四个特性。那么我们就可以称他为事务

* 注意:隔离级别从小到大安全性越来越高,但是效率越来越低

数据库查询隔离级别:  select @@tx_isolation;

数据库设置隔离级别:  set global transaction isolation level 级别字符串;

                                                             ***个人理解,哪里有错麻烦大佬指点***

猜你喜欢

转载自blog.csdn.net/weixin_46522803/article/details/132986538