• 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),又叫做"写锁"。写锁会排斥其他所有获取锁的请求,一直阻塞,直到写入完成释放锁。

    一致性

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

  • 相关阅读:
    “攻城狮”如何写高逼格的代码
    基于R语言的raster包读取遥感影像
    【校招VIP】产品思维设计之需求分析
    文件上传下载
    全网最丑焊锡教程(仅排针焊接心得)
    Codeforces Educational Codeforces Round 164 E. Chain Reaction 【思维、分块、调和级数复杂度】
    《SpringBoot项目实战》第五篇—接口发生异常如何统一处理
    Linux中yapi部署
    竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
    C#WPF命令行参数实例
  • 原文地址:https://blog.csdn.net/lee_nacl/article/details/127444448