事务的四大特性及实现原理
1.原子性(Atomicity)
不可再分,事务的最小单位。在一个事务中,我们对数据库的操作,要么都成功,要么都失败,不可能出现部分成功或部分失败的情况。若操作失败必须回滚。
原子性在innodb是通过undo log实现的,它记录了数据修改之前的值(逻辑日志),一旦发生异常,就可以用undo log实现回滚的操作。
2.一致性(Consistency)
指的是数据库的完整性约束没有被破环,事务执行的前后都是合法的数据状态。比如主键必须是唯一,字段长度符合要求。除了数据库自身的完整性约束,还有事用户自定义的完整性。
3.隔离性(Isolation)
有了事务的定义之后,在数据库里面会有很多事务同时去操作我们的同一张表或同一行数据,必然会产生一些并发或干扰操作,那么我们对隔离性的定义,就是这些很多个事务对同表同行的操作应该是透明的,互不干扰的。通过这种方式,我们最终也是保证业务数据的一致性。
4.持久性(durability)
我们对数据库的任意操作,增删改,只要事务提交成功后,那么结果就是永久性的,不可能因为系统宕机或重启数据库的服务器恢复到原来的状态。这就是事务的持久性。
持久性是通过redo log来实现的,我们操作数据时,会先写到内存中的bufferpool中,同时记录redo log,如果在刷盘前出现异常,在重启后就可以读取redo log的内容,写入到磁盘,保证数据的持久性。