【MySQL】事务&实现原理

目录

事务

如何使用

ACID

原子性(Atomicity)

原子性实现原理

持久性(Durability)

持久性实现原理

隔离性

隔离级别

读未提交

读已提交

可重复读

串行化

隔离级别原理

共享锁&独占锁

意向锁

索引记录锁

间隙锁

临键锁

插入意向锁

自增锁

 MVCC

实现原理

一致性(Consistency)


事务

事务是将一组SQL语句打包成一个整体,在这组SQL的执行过程中,要么全部成功,要么全部失败。这组SQL语句可以是一条也可以是多条

如果转账成功,应该满足以下要求:

张三的账户余额减少100,变成900;李四的账户余额增加了100,变成1100。不允许出现张三的余额减少而李四的余额没有增加的情况。(原子性)

转账前张三和李四的总余额不变,即转账前他们的余额总数为2000,转账后他们的余额总数也应为2000。(一致性)

转账后的余额结果应当保存到存储介质中,以便日后查询和确认。(持久性)

在转账过程中,张三和李四的余额不能因为其他转账事件而受到干扰。(隔离性)


如何使用

在MySQL中,只有InnoDB引擎支持事务。通过下面的一些语句可以完成对事务的控制。

START TRANSACTION 或 BEGIN:开始一个新的事务。
COMMIT:提交当前事务,并将更改持久化保存到数据库中。
ROLLBACK:回滚当前事务,取消其所有更改,将数据库恢复到事务开始前的状态。


SET autocommit:禁用或启用当前会话的默认自动提交模式。autocommit 是一个系统变量,可以通过选项指定或者通过命令行设置 --autocommit={OFF|ON}。

默认情况下,MySQL启用事务的自动提交模式。这意味着每个单独的SQL语句都被视为一个独立的事务,并且在语句执行完成后会自动提交事务,就好像被 START TRANSACTION 和 COMMIT 包裹一样。因此,不能使用 ROLLBACK 来撤销单个语句的执行结果。如果在语句执行期间发生错误,MySQL会自动回滚当前语句所引起的任何更改。


ACID

ACID(原子性、一致性、隔离性、持久性)模型是数据库设计的重要原则,旨在确保事务处理的可靠性和数据完整性。MySQL的InnoDB存储引擎严格遵循ACID模型。

原子性(Atomicity)

事务中的所有操作要么全部完成并提交,要么全部取消(回滚)。在MySQL中,使用 COMMIT 提交事务或 ROLLBACK 回滚事务来保证原子性。

原子性实现原理

实现回滚的依据就是靠 uodo 日志来完成的。http://t.csdnimg.cn/s7E9X 具体看uodo日志部分。


持久性(Durability)

在提交事务时,MySQL会将数据持久化到存储介质,比如磁盘。通常情况下这一过程是可靠的,但在服务器崩溃或突然断电的情况下,可能会发生事务只部分写入数据文件的情况,导致数据不完整,从而破坏数据的一致性。

持久性实现原理

具体查看Redo日志部分http://t.csdnimg.cn/O5ImZ

为了解决这个问题,MySQL采用了以下几种机制来确保事务的持久化和数据的一致性:

重做日志(Redo Log):在真正将数据写入数据文件之前,MySQL会将事务中的所有数据修改操作记录到重做日志中。这些日志记录允许在服务器重启后重新执行尚未完成的事务操作,从而确保所有必须持久化的数据都能被写入存储介质中。

双写缓冲区(Doublewrite Buffer):MySQL还使用双写缓冲区来避免因写入过程中崩溃而导致的数据文件损坏。它首先将数据写入双写缓冲区,然后再将数据写入实际的数据文件。这种方式可以保证即使在写入过程中出现故障,数据文件也不会受到破坏。

二进制日志(Binary Log):除了重做日志,MySQL还使用二进制日志来记录数据库的所有修改操作。这些日志不仅用于恢复操作,还可以用于数据库复制和恢复等操作。


隔离性

MySQL服务可以同时被多个客户端访问,每个客户端执行的 DML 语句以事务为基本单位。当不同的客户端对同一张表中的同一条数据进行修改时,可能会出现相互影响的情况。为了保证不同的事务在执行过程中不受影响,事务之间需要相互隔离,这种特性就是隔离性。

隔离级别

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值