原子性
事务是数据库中最基本也是最重要的概念之一。InnoDB采用redo log和undo log两个日志缓冲区来实现事务的原子性。redo log记录了数据修改的物理操作,而undo log则记录了修改的逻辑操作。在事务提交之前,redo log会被写入磁盘以确保事务的持久性;在事务回滚时,undo log会根据redo log的内容逆序执行相反的操作。这样就可以确保事务的原子性,避免出现半写、脏读等问题。
持久性
InnoDB使用redo log来确保事务的持久性。redo log记录了对数据页做出的物理修改,而不是逻辑上的修改。当事务提交后,在将数据保存到磁盘之前,redo log会被写入磁盘。即使在系统崩溃时,重新启动后也可以通过redo log恢复修改操作,从而避免数据的丢失。
隔离性
隔离性是指多个并发事务之间互相隔离不会产生干扰。在InnoDB引擎中,使用MVCC机制实现了多版本并发控制。MVCC通过在每条记录上保存多个版本来实现数据的隔离,从而可以在不锁定表或行的情况下实现高并发的访问。根据锁
一致性
InnoDB中使用了快照读和当前读两种方式来实现MVCC。快照读是在事务开始时创建一个视图,用于记录当前数据库中的所有数据。当前读则是指读取最新的数据,包括已提交和未提交的事务的修改。在快照读中,对数据的修改会被复制出一份新数据,旧数据仍然保留在原地。这样不同事务使用的数据版本就能够相互独立,不会互相干扰,从而保证了数据的一致性