数据库中的事务,简单来讲就是数据库操作的集合,而它有四个性质,分别是:原子性、隔离性、一致性、持久性。
事务的四大性质
1.原子性:简单来说就是要么事务中的操作全做,要么全部做,不存在只做了一半的状态。映射到显示生活中就是转账的例子。
2.隔离性:多个并发事务之间应该有是隔离的,互不影响的。但是在计算机中可能是交互执行的,所以出现了隔离性级别的概念。
3.一致性:事务的操作让数据库从一个状态转化到另外一个状态,两个状态应该是一致的。例如假如只有2个账户,5000元的钱转来转去,最后两个账户的钱的总和应该还是5000
4.持久性:事务对数据库的操作会保存到磁盘上,就算是宕机,断点,也不会丢失
关于事务的状态转换图:
数据库日志
redo日志:也叫做重做日志(用于系统奔溃之后,恢复脏页用的)
使用的目的:在InnoDB数据库引擎中,数据从磁盘中读取的最下单位是1页(16kb),那我们为了满足事务的持久性,对数据进行修改时,就要把修改的页刷新到磁盘,就算是非常微小的修改也需要这么做。可是磁盘IO的速度是非常慢的,这么做显然是非常愚蠢的,有什么办法呢?
办法就是把修改的位置记录下来,这个记录就是redo日志,我们提交事务的时候不必直接把修改的页面刷新到磁盘,而是把redo日志刷新到磁盘就好,redo日志可小的多了。(当然redo日志也有缓冲区,log buffer)
那么redo日志什么时候刷新到磁盘呢?
1.log buffer 空间不足时
2.事务提交时
3.服务器正常关机时
4.服务器空闲时
5.后台有特定线程去刷时
undo日志:因为事务需要回滚,该日志就是把回滚 所需要的信息记录下来