开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情
mysql事务知识
前文
mysql事务是开发中非常重要的一个内容,它保证了当我们进行一系列操作时,能够实现操作的完整一致性,以及避免不同操作之间的影响。本文是对mysql事务的一些基础知识的总结。
mysql事务
mysql事务特性
mysql的事务主要是保证了执行过程中的如下四点特性:
- 原子性:原子性主要是指事务会将执行过程中的所有操作,视为完整的一组操作,当其中任意操作出现异常时,所有的操作都会发生回滚的处理。主要是通过undo log来实现。
- 一致性:一致性主要是表示通过事务的处理,不会对于数据库中的数据产生异常的影响,也就是相当于操作前后数据库中的数据全部都是完整的结构。
- 隔离性:隔离性主要是针对不同的事务之间来说,不同的事务之间不会互相产生影响,每个事务保持其自己的独立性。在并发的操作时,多个事务可以同时进行。当然,实际的隔离效果要取决于实际事务的隔离级别。
- 持久性:持久性指的是当事务执行结束提交后,事务中执行的内容会写入到数据库中,持久性存在而不是临时数据。
mysql事务隔离级别
提到事务隔离级别,首先需要明确三个概念:脏读、幻读、不可重复读。脏读指的是在事务中读取到其他事务未提交的数据,数据有可能在其他事务执行回滚时被撤销,也就不是持久性数据。不可重复读主要是在同一事务执行过程中,两次读取同一条数据时,出现读取不同的情况。也就是在事务进行过程中,其他事务的提交变更了数据内容,主要是针对数据的修改。幻读是指在事务执行过程中,出现数据查询数量变更的情况,也就是其他的事务进行了数据的新增。与不可重复读相对比,主要是数据的修改及新增两种情况。
下面再来看一下事务的隔离级别,主要是如下几种:
- 读未提交:读未提交指的是读取到其他事务未提交的数据,会出现脏读、幻读、不可重复读的问题,是最低的事务隔离级别。
- 读已提交:读已提交是只能读取到其他事务已经提交的内容,避免的脏读的出现,但其他事务的修改及新增可能导致出现幻读及不可重复读。
- 可重复读:可重复读主要是保证每次读取的数据保持一致,解决了脏读和不可重复读的问题。在此基础上可以通过快快照数据的读取及加锁处理,实现幻读现象的避免。这是mysql的默认数据隔离级别。
- 串行化:串行化是采用最严格加锁的方式,保证不会出现脏读、幻读、不可重复读,但同样的会牺牲事务的执行效率。
总结
本文的内容主要是mysql事务特性及mysql事务隔离级别相关内容的总结,帮助我们能够更理解事务的本质。