Mysql 的ACID

数据库通过原子性(A)、隔离性(I)、持久性(D)来保证一致性(C)。其中一致性是目的,原子性、隔离性、持久性是手段。因此数据库必须实现AID三大特性才有可能实现一致性。

一致性

举个例子,处理一系列的数据,不光是要保证数据原子性,隔离性,持久性,还要让数据与预期的数据一样,就比如我预期a:200 —> 2000,b:3000 —>1200,原子性就是保证了他两个数据都变更了,但是变更可能不一定正确,这与程序员的后端开发也有关系

原子性

简单来讲,就是我这个事务内的sql操作,要么同时成功,要么同时失败

undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

隔离性

MVCC即多版本并发控制,一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。如果一个事务读取的行正在做DELELE或者UPDATE操作,读取操作不会等行上的锁释放,而是读取该行的快照版本。

我将在下一篇博客中着重讲解事物的四个等级(读未提交,读已提交,可持续读,串行化)

持久性

简述来说,就是数据库的数据更改了以后,不是暂时的修改,是持久性的更改,不能回滚了

Mysql修改数据的大概流程是先把磁盘上的数据加载到内存中,在内存中对数据进行修改,再刷回磁盘上。如果此时突然宕机,内存中的数据就会丢失。

顺带一提Innodb的读写

InnoDB读快的原因是因为存储引擎内有缓存池Buffer Pool,缓存的读取速度远快于磁盘读取

写操作快的原因是因为redo日志文件的存在,为何不把数据直接写道ibd中呢?因为redo日志文件可以实现顺序写操作,就是磁盘中一串紧挨着写,而ibd文件是一个表一个,所以不能实现顺序写操作

当mysql宕机以后,缓存池会清空,而重启以后redo日志文件会把日志再次存到缓存池中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值