Mysql事务实现

1.Mysql怎么保证一致性的?

(1)从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。也就是说ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性。数据库必须要实现AID三大特性,才有可能实现一致性。
(2)从应用层面,通过代码判断数据库数据是否有效,然后决定回滚还是提交数据!

2.Mysql怎么保证原子性的?

利用Innodb的undo log:

(undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。)

例如

(1)当你delete一条数据的时候,就需要记录这条数据的信息,回滚的时候,insert这条旧数据
(2)当你update一条数据的时候,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作
(3)当年insert一条数据的时候,就需要这条记录的主键,回滚的时候,根据主键执行delete操作

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

3.Mysql怎么保证持久性的?

利用Innodb的redo log:

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

使用redo log,当做数据修改的时候,不仅在内存中操作,还会在redo log中记录这次操作。当事务提交的时候,会将redo log日志进行刷盘(redo log一部分在内存中,一部分在磁盘上)。当数据库宕机重启的时候,会将redo log中的内容恢复到数据库中,再根据undo log和binlog内容决定回滚数据还是提交数据。

好处:
将redo log进行刷盘比对数据页刷盘效率高

redo log体积小,刷盘快。一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快。

4.Mysql怎么保证隔离性的?

利用的是锁和MVCC机制:

至于MVCC,即多版本并发控制(Multi Version Concurrency Control),一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。

如果一个事务读取的行正在做DELELE或者UPDATE操作,读取操作不会等行上的锁释放,而是读取该行的快照版本。

MVCC机制在可重复读(Repeateable Read)和读已提交(Read Commited)的MVCC表现形式不同
在事务隔离级别为读已提交(Read Commited)时,一个事务能够读到另一个事务已经提交的数据,是不满足隔离性的。但是当事务隔离级别为可重复读(Repeateable Read)中,是满足隔离性的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL事务实现的原理主要涉及ACID特性以及锁机制。 ACID是指事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。原子性表示事务的所有操作要么全部成功,要么全部失败回滚;一致性保证了事务执行前后数据库的完整性;隔离性确保并发执行的事务相互之间是隔离的,互不干扰;持久性保证了一旦事务提交,其结果将永久保存在数据库中。 MySQL使用锁机制来实现事务的隔离性。当多个事务同时对数据库进行读写操作时,为了避免数据的不一致性,MySQL会使用不同的锁来保证事务的隔离性。 MySQL提供两种类型的锁:共享锁(S锁)和排他锁(X锁)。共享锁允许事务进行读操作,但不允许进行写操作;排他锁允许事务进行读写操作。当一个事务需要对某个数据进行修改时,它会先申请排他锁,其他事务需要读取该数据时,需等待排他锁释放。 MySQL中还存在多个隔离级别,包括读未提交、读提交、可重复读和串行化。每个隔离级别会对并发事务的读写操作进行不同程度的锁定控制,从而保证事务的隔离性。 总结来说,MySQL事务实现原理是通过ACID特性和锁机制来保证事务的原子性、一致性、隔离性和持久性。锁机制通过共享锁和排他锁来控制对数据的读写访问,不同的隔离级别则决定了锁的粒度和控制方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvk_l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值