本篇来大致总结一下关于MySQL的事务的相关知识点(基于InnoDB)
一、事务的特性
一提到事务,最基础的便是事务的特性了,那么无忙首先来看看事务的四大特性
原子性
同一个事务中的操作,要么全部完成,要么全部不完成,不会在操作期间结束,且如果事务中的某个环节执行错误,那么该事务中已经执行的所有操作都将回滚到事务开始前的状态
一致性
事务操作前后,数据库中的数据满足完成性约束,数据库保持一致性状态
隔离性
数据库允许多个并发事务同时进行读写操作,多个事务同时进行操作,不会互相干扰
持久性
事务结束之后,对于数据的修改是永久的,不会因为系统故障而丢失
二、事务的隔离级别
脏读(读未提交)
查询到已更改还未提交的事务的数据
幻读(读提交)
在一个事务中对某条数据进行查询,恰巧另一事务开启对该数据进行修改,导致两次查询的数据不同
可重复读
事务执行过程中看到的数据与事务执行前看到的数据是一致的(MySQ LInnoDB默认隔离级别)
串行化
对记录加上读写锁,在多个事务对这条记录进行读写操作时如果发生了读写冲突,后面的事务需要等到上一个事务完成之后才能继续执行
三、并行事务会发生的问题:
(1)脏读
(2)幻读
(3)不可重复读
解决办法分别对应隔离级别中的脏读,幻读,不可重复读
事务隔离级别的无锁实现方式:MVCC
MVCC(多版本并发控制器)是事务隔离级别的无锁实现方式,主要依靠数据库表单中的隐藏列(最近修改事务的id,回滚指针),undolog和readview来实现
更多详细的介绍可以看之前的一篇文章:链接: MVCC