事务是什么?

在知道事务的相关信息之前,我们需要先理解:什么是事务?

事务是一组不可再分的最小的执行单元,即事务内的数据,必须要么全部执行完成,要么不执行,即可为不可再分。

Mysql中只有支持事务的存储引擎,才可以使用事务,例如InnoDB。

事务的四个特性

特性

原子性:atomicity

事务的原子性要求事务内的一组操作是原子操作,不可中断的,如果发生了中断,则所有的修改都会被回滚。即只有所有的操作都是成功的,这个事务才会成功。

例如一个转账的操作,分为了两个部分:从A账户扣除金额,B账户加上相应的金额。只有两个部分的操作都成功,则整个事务才算成功,转账操作才算完成。如果第一部分成功,第二部分失败,则整个事务会失败,A账户的金额也不会减少,B账户的金额也不会增多。

事务的原子性由redo log 实现。在提交事务的时候,会使用到两阶段提交的方式提交数据,如果在提交的过程中,服务器发生了意外的宕机,当服务器启动的时候,会通过 redo log 去恢复内存中的数据,如果发现redo log中的数据并未完全提交,会直接回滚之前的操作。

一致性:consistency