MySQL数据库事务和锁的机制

本文深入探讨数据库事务的原子性、一致性、隔离性和持久性,解释其背后的实现原理,包括UndoLog和RedoLog的作用,以及不同隔离级别的概念。

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

数据库事务的特点

  1. 原子性:一个事务中的所有操作作为不可分的最小原子,这里面的操作要么全部执行,要么全不执行
    *原子性的实现原理:Undo Log *

在MySQL数据库InnoDB存储引擎中Undo Log 是实现多版本并发控制(简称:MVCC)
在操作任何数据之前,首先将数据备份到一个地方(这个存储备份的地方叫Undo Log).之后进行数据的修改。如果出现了错误或者用户执行了rollback语句,系统可以利用Undo Log中的备份将数据恢复到事务开始的地方
undo log是逻辑日志,可以理解为

  1. 当delete一条记录时,undo log 中会记录一条对应的insert记录
  2. 当insert一条记录时,undo log中会记录一条对应的delete记录
  3. 当update一条记录时,它会记录一条对应相反的update记录
  1. 持久性:
    持久性实现原理: Redo Log

和Undo Log 相反,Redo Log 记录的是新数据的备份。在事务提交前,只需要将Redo Log 持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是Redo Log 已经持久化。系统可以根据Redo Log 的内容,将数据恢复到最新的状态

  1. 隔离性:事务具有隔离性,理论来说事物之间的执行不应该产生影响,它们对数据库的影响应该和它们串行执行时一样
    隔离性实现原理: 锁 for update 排它锁;; lock in share mode 共享锁

锁可以实现并发控制,但是还有其它的策略实现

  1. 基于时间戳的并发控制
  2. 基于有效性检查的并发控制
  3. 基于快照隔离的并发控制
    SQL标准为事务定义了不同的隔离级别,从低到高
  4. 读未提交
  5. 读已提交
  6. 可重复读(MySQL默认的)
  7. 串行化
  1. 一致性
    一致性是事务的根本追求,一致性是靠原子性,隔离性,持久性来保障的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值