• MySQL事务控制


    事务的特性

    原子性(Atomicity)

    事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全部不执行

    一致性(Consistent)

    在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的

    隔离性(Isolation)

    数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然

    持久性(Durable)

    事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持

    事务的特性的实现方式

    redo log(持久性)

    mysql为了提升性能不会把每次的修改都实时同步到磁盘中,而是先存到缓存中,然后再使用线程去做缓冲池和磁盘中的同步。这样必然会存在问题,假如突然断电,那么没有持久化到磁盘的信息必然会丢失,那么持久性如何实现?

    redo log叫做重做日志,当事务提交的时候会把所有的修改信息存放在redo log中,并且会把redo log持久化到磁盘,当电脑重启后就会重新执行redo log的修改信息来恢复数据,这样就能达到持久性的目的

    undo log(原子性)

    一个事务中所有的操作要么全部成功提交,要么全部失败回滚,这就是事务的原子性

    undo log叫做回滚日志,每条数据的变化都会产生一条记录,并且日志持久化到磁盘,undo log用来记录数据修改前的信息,比如说要插入一条记录,那么undo log就会记录一条删除该信息的语句,这样你需要回滚的时候那么undo log就会执行删除你之前插入的那条记录,达到没有修改前的状态,更新一个记录也会生成一条sql记录你更新前的字段状态,从而实现了原子性

    读写锁+MVCC(隔离性)

    共享锁(shared lock),又叫做"读锁"。读锁是可以共享的,或者说多个读请求可以共享一把锁读数据,不会造成阻塞。

    排他锁(exclusive lock),又叫做"写锁"。写锁会排斥其他所有获取锁的请求,一直阻塞,直到写入完成释放锁。

    一致性

    通过原子性,持久性,隔离性来实现

  • 相关阅读:
    Rocket快速实战与高级原理详解
    java学习第三天笔记-运算符01算术运算符的基本用法41
    YOLOv7-Pose尝鲜,基于YOLOv7的关键点模型测评
    3D点云算法总结(持续汇总)
    Redis基础
    openbabel包的安装
    shell脚本中export命令未生效,原因详解
    bug:Junit5报错,@SpringBootTest没有运行
    SQL注入基础
    左神算法(二)
  • 原文地址:https://blog.csdn.net/lee_nacl/article/details/127444448