• 事务(包含ACID)


    一个事务就是一个完整的业务逻辑,是一个最小的工作单元,不可再分

    事务就是一组sql语句,这组sql语句要么都完成,要么都没完成

    1.事务的原则;ACID(原子性Atom,一致性Consist,隔离性Isolation,持久性Durability)

    (1)原子性:事务就是一组sql语句,这组sql语句要么都完成,要么都没完成

    (2)一致性:事务执行前和执行后,数据要保持一致

    以转账为例,没转帐前A,B加起来一共有1200元,不管你们两个人怎么转账,两个人的钱加起来永远还是1200

    (3)持久性:事务被提交之后,对数据库中数据的改变是持久的,即使数据库发生什么障碍,数据也不会再变化

    事务没有提交(没有结束),就恢复到原状

    事务提交了(结束了)则持久化到数据库了

    (4)隔离性:多个事务同时在执行,事务与事务之间互不影响,即排除其他事务对本事务的影响

    比如下面A在给B转账,C也在给B转账

    只有保证了事务的持久性,原子性,隔离性,一致性才能得到保障

    即A,I,D是手段,C是目的

    ACID 靠什么保证的呢?

    A原子性由 undo log 日志回滚日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql

    I隔离性由MVCC或者锁机制来保证

    D持久性由redo log重做日志来保证,mysql修改数据同时在内存和redo log记录这次操作,事务提交的时候通过redo log刷盘,宕机的时候可以从redo log恢复

    一致性则是通过持久性+原子性+隔离性来保证

    其实事务主要是为了实现 C ,也就是一致性,具体是通过AID,即原子性、隔离性和持久性来达到一致性的目的,所以这四个不应该相提并论,但是外国人就想拼成单词Acid(酸),就把它们排好序搞在一起来念

    2.事务的隔离级别参考下面这篇博客

    1分钟四个举例超清晰理解事务的四个隔离级别_Pr Young的博客-CSDN博客_事务隔离级别 例子

    3.事务的自动提交机制

    mysql默认开启事务的自动提交,也就是每执行一条sql语句就提交一次

    开启和关闭mysql的自动提交事务机制

    1. set autocommit=0 关闭自动提交
    2. set autocommit=1 开启自动提交

    4.手动开启事务和手动关闭事务:

    1. set autocommit=0 //关闭自动提交事务
    2. start transaction;//开启事务
    3. sql语句1;
    4. sql语句2;
    5. sql语句3;
    6. commit;//提交事务
    7. set autocommit=1 //开启自动提交

    5.回滚rollback:回滚只能回到上一次的提交点   

    只有保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。也就是说 A、I、D 是手段,C 是目的!

  • 相关阅读:
    基于JSP的IQ智力测试系统
    Redis 数据一致性方案的分析与研究
    千年TGS服务器日志报错如何解决
    美术馆预约小程序|基于微信小程序的美术馆预约平台设计与实现(源码+数据库+文档)
    如何获取微信的版本号详解【附完整源码】
    SpringBoot之异步方法
    哈希结构的实现
    vscode c++ 报错identifier “string“ is undefined
    Linux系统编程(七):线程同步
    Vue如何实现快进后退的跑马灯组件
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/126849208