自学内容网 自学内容网

MySQL事务知识点梳理

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

目录

什么是事务 ?

事务的四个特性

原子性

一致性

隔离性

持久性

总结

拓展

并发事务问题

脏读

不可重复读

幻读

事务的隔离级别

读未提交【Read Uncommitted】

读提交【Read Committed】

可重复读【Repeatable Read】

串行化【Serializable】

查看以及设置事务隔离级别

关于事务的隔离级别的必知知识点


什么是事务 ?

事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。它由一组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的时候,影响会比较大

相信看到这里的小白或者大佬会发现有一部分的内容好像是重复的,博主本来也想删除,但是经博主思考后留下这一部分重复的更好,因此还望各位小伙伴们见谅哟!

那么,本篇文章的内容就先到这里,我们下期文章再见。

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


原文地址:https://blog.csdn.net/2302_80418176/article/details/143961784

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!