事务的原子性:事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。
事务的持久性:事务一旦完成,该事务对数据库所做的所有修改都会持久的保存到数据库中。
undo log:为了实现事务的原子性,在innodb中,还用undo log实现MVCC
undo log原理:在操作任何数据之前,首先将数据备份到一个地方(即undo log),然后进行数据修改,如果出现错误或用户执行了rollback语句,则系统就可以利用undo log中的备份数据恢复到事务开始之前的状态
redo log原理:redo log记录的是新数据的备份。在事务提交前,只要将redo log持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是redo log已持久化,系统可以根据Redo Log的内容,将所有数据恢复到最新的状态。
undo +redo 事务的特点:
1.为了保证持久性,必须在事务提交前将redo 持久化
2.数据不需要在事务提交前写入磁盘,而是缓存在内存中
3.redo 保证事务的持久性
4.undo 保证事务的原子性
5.数据必须要晚于redo log写入持久存储
undo+redo主要是为了提升IO性能,通过缓存数据,减少了写数据的IO。但是却引入了redo log 的IO,通过以下特点提升redo log的IO性能:
1.尽量保持redo log存储在一段连续的空间上,所以在系统第一次启动时就会将日志文件的空间完全分