数据库本地事务

读未提交

一个事务可以读取到另一个事务未提交的内容,就是脏读

读已提交

读取不到未提交的数据,读的还是原始数据,只有事务提交后了才能读取到

可重复度

在一个事务执行过程中,不管对方事务有没有提交,读取到的数据都是一致的

串行化

事务被排成队,一个个去执行

ACID

隔离性和一致性可以通过事务去实现,但是原子性和持久性是靠undo和redo实现的

undo日志:

为满足原子性,在操作数据之前,会将数据被分到undo Log中,然后再执行修改,如过执行了rollback操作,系统可以将Undo Log数据恢复到事务开始前的状态

undoLog和数据都是先写入内存中,然后再写入磁盘,事务只要提交了,数据肯定会被写入磁盘中,这就是持久性

redo日志

和undo Log相反,redo Log记录的是新数据的备份。在事务提交前,只要将redo Log持久化即可,不需要将数据持久化,减少了磁盘IO读写次数,如果数据库宕机重启后,可以直接从redo中读取数据,数据写入磁盘是在事务提交后异步写入磁盘,实际上数据已经写入到redo log中了

同样是写入,为什么写到redo log就比直接将数据写入磁盘要快呢?

因为有两种写法,一种是随机写入,随机写入时这个空间是随机的所以写入需要转动磁盘寻址,这个很耗费时间。还有一种是顺序写,顺序写是在磁盘中开辟一条连续的空间,这样磁盘就不需要寻址,而redo log就是采用的是顺序写入

为什么mysql数据写入不可以使用顺序写入?

因为mysql的表结构比较复杂,而且还会有索引,而索引是B+树,所以不可以使用顺序写入

undo log在真实情况下其实并非写入磁盘,而是写入redo log中的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值