本篇文章给大家带来的是关于事务的知识点梳理

目录
[什么是事务 ?](#什么是事务 ?)
[读未提交【Read Uncommitted】](#读未提交【Read Uncommitted】)
[读提交【Read Committed】](#读提交【Read Committed】)
[可重复读【Repeatable Read】](#可重复读【Repeatable Read】)
什么是事务 ?
事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。它由一组dml语句组成,且这些语句在逻辑上存在一些相关性
为了便于大家更好的理解事务是什么,大家可以去看下面这个例子
示例:你毕业了, 学校的教务系统后台 MySQL 中,不在需要你的数据,要删除你的所有信息(一般不会:) ), 那么要删除你的 基本信息(姓名,电话,籍贯等)的同时,也删除和你有关的其他信息
注意:一个完整的事务,绝对不是简单的 sql 集合,还需要满足它的四个属性。
事务的四个特性
原子性、 一致性、 隔离性、 持久性

上面的图是我在网上找的一张图,里面的小球就是原子,从图中我们可以看到所有原子都是一致的------原子与原子之间抱持着一个隔离的样子(这里的隔离就是没有挨在一起,差不多这个意思)因此我们就可以通过下面这八个字记住事务的特性
巧记:原子一致持久隔离
原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中 间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个 事务从来没有执行过一样。
一致性
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完 全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工 作。
隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务 并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交( Read (S uncommitted )、读提交( read committed)、可重复读( erializable ) repeatable read)和串行化
持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
重点:
原子性(Atomicity,或称不可分割性)
一致性(Consistency)
隔离性(Isolation,又称独立性)
持久性(Durability)。
简称ACID
总结
原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性:事务完成时,必须使得所有数据保持一致性。
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。即A和B两事务独立运行,互不影响。
持久性:事务一旦提交或回滚,他对数据库中的数据的改变是永久的。
拓展
并发事务问题
脏读
一个事务读到另外一个事务还没提交的数据

不可重复读
一个事务先后读取同一条记录,但两次读取的数据不同,

幻读
一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,有发现这行数据存在,好像出现了"幻影"。

事务的隔离级别
读未提交【Read Uncommitted】
在该隔离级别,所有的事务都可以看到其他事务没有提交的 执行结果。
常见的并发问题有:脏读,幻读,不可重复读等
读提交【Read Committed】
该隔离级别是大多数数据库的默认的隔离级别,注意:不是 MySQL 默 认的!!!
它满足了隔离的简单定义:一个事务只能看到其他的已经提交的事务所做的改变。
这种隔离 级别会引起不可重复读,即一个事务执行时,如果多次 select, 可能得到不同的结果。
可重复读【Repeatable Read】
MySQL 默认的隔离级别,它确保同一个事务,在执行 中,多次读取操作数据时,会看到同样的数据行。
注意:有幻读问题
串行化【Serializable】
事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突, 从而解决了幻读的问题。
总结:

serializable :事务隔离级别最高,性能最差
read uncommitted: 性能最高,数据安全性最差
查看以及设置事务隔离级别

关于事务的隔离级别的必知知识点
1.其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低
2.不可重复读的重点是修改和删除:同样的条件, 你读取过的数据,再次读取出来发现值不一样了
3.幻读的重点在于新增:同样的条件, 第1次和第2次读出来的记录数不一样
说明: mysql 默认的隔离级别是可重复读,一般情况下不要修改
4.事务也有长短事务这样的概念。事务间互相影响,指的是事务在并行执行的 时候,即都没有commit的时候,影响会比较大
相信看到这里的小白或者大佬会发现有一部分的内容好像是重复的,博主本来也想删除,但是经博主思考后留下这一部分重复的更好,因此还望各位小伙伴们见谅哟!
那么,本篇文章的内容就先到这里,我们下期文章再见。

都看到这里了,给个三连呗!谢谢啦!!!
