文章目录
概述
我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。
这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制、日志机制,用一整套机制来解决多事务并发问题。接下来的,我们会深入讲解这些机制,让大家彻底理解数据库内部的执行原理。
事务及其ACID属性
事务是一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性。
事务具有以下4个属性,通常简称为事务的ACID属性。
原子性(Atomicity)
当前事务的操作要么同时成功,要么同时失败。原子性由undo log日志来实现。
一致性(Consistent)
使用事务的最终目的,由其它3个特性以及业务代码正确逻辑来实现。
隔离性(Isolation)
在事务并发执行时,他们内部的操作不能互相干扰。隔离性由MySQL的各种锁以及MVCC机制来实现。