mysql innodb事务的ACID及其实现的保证机制

博客介绍了数据库事务的四大特性。原子性要求事务操作要么全成功,要么全回滚,通过redo log保证;一致性指事务执行前后数据约束性不变,由undo log和回滚机制保证;隔离性让并行事务相互不可见,通过锁等实现;持久性确保事务提交后修改永久保存,由redo log保证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

atomicity原子性

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

如何保证:

通过redo log来保证,回放redo log

Consistency一致性

数据如果有约束性,那么事务执行前后,数据的约束性还是存在的,并没有破坏掉。比如说转账事务的前后,资金的总数这个约束条件是不会被破坏的

如何保证:

通过undo log,回滚机制来保证

Isolation隔离性

这个是很不好理解的一个含义。我觉得姜承尧老师讲的比较好。

多个事务并行,一个事务所做的更改,不管有没有提交,在并行的另一个事务中都是不可见的,但最后的效果看起来多个并行的事务好像是串行一样

如何保证:

通过lock来保证

* locking (锁)
* concurrency control (并发控制)
* isolation (隔离级别)
* serializability (序列化)

以上四个其实在数据库中讲的是同一个概念; 锁是用来实现并发控制,并发控制用来实现隔离级别,隔离级别是通过锁来控制的,锁的目的为了使得事务之间的执行是序列化的

Duration持久性

一旦事务提交,其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。这个duration指的是mysql服务器可以重启的情况下,crash掉之后(比如说只写到pool buffer中,还没有fsync到磁盘文件中),保证duration。而不是物理损坏,物理损坏由备份来负责的

如何保证:

是通过redo log来保证的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值