• MySQL事务


    事务的概念

    事务由一组逻辑相关的DML语句(数据库操纵语言)组成,MySQL提供一种机制使这些语句要么全部执行成功,要么全部执行失败。

    一个完整的事务需要满足四个属性:
    原子性、一致性、隔离性、持久性

    简称ACID:
    原子性(Atomicity)
    一致性(Consistency)
    隔离性(Isolation)
    持久性(Durability)

    事务为应用层服务,不需要数据库使用者考虑很多潜在的错误和并发等问题。
    MySQL使用 Innodb 引擎才支持事务 。

     show engines \G --查看数据库引擎
    
    • 1

    在这里插入图片描述

    事务的属性

    原子性:
    一个事务中的所有操作,要么全部完成,要么全部不完成。事务在执行过程中发生错误,需要回滚到事务开始前的状态。

    持久性:
    事务结束后,对数据的修改是永久的,即使系统故障也不影响。

    隔离性:
    数据库允许多个事务并发读写数据,隔离性可以防止多个事务交叉执行导致数据不一致。

    一致性:
    事务执行前后,数据库完整性没有被破坏。保证了前三个属性就实现了一致性,当然一致性还需要数据库使用者操作得当。

    事务的提交

    提交方式有手动提交、自动提交

    InnoDB的单条sql语句会被封装成事务,受自动提交影响

    查看是否自动提交
    在这里插入图片描述
    关闭自动提交:

    SET AUTOCOMMIT=0;
    
    • 1

    在这里插入图片描述
    开启自动提交:

    SET AUTOCOMMIT=1;
    
    • 1

    在这里插入图片描述
    手动提交:

    输入begin或者start transaction来开启一个事务
    开启后不受自动提交影响,必须通过commit提交,数据才能持久化

    操作异常时候,MySQL自动回滚,可以设置回滚点手动回滚,commit后回滚无效。

    设置回滚点:

    savepoint 回滚点名称;
    
    • 1
    rollback to 回滚点名称;  
    
    • 1
    rollback;  --回滚到最开始
    
    • 1

    事务的隔离级别

    脏读:一个事务读到未提交的数据
    幻读:一个事务读到新插入的数据
    不可重复读:一个事务前后读取到的某项数据不同

    读未提交【Read Uncommitted】:
    所有的事务都可以看到其他事务没有提交的执行结果。
    相当于没有隔离性,也会有很多并发问题,如脏读,幻读,不可重复读。

    读提交【Read Committed】 :
    大多数数据库的默认的隔离级别(不是 MySQL 默认的)。一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读。

    可重复读【Repeatable Read】:
    MySQL 默认的隔离级别,它确保同一个事务,在执行中,多次读取结果相同。但是会有幻读问题(MySQL该级别解决了幻读问题)。

    串行化【Serializable】:
    事务的最高隔离级别,对所有操作全部加锁,但是串行化会导致超时和锁竞争,效率很低,几乎不使用。

    查看全局隔离级别:

    SELECT @@global.tx_isolation;
    
    • 1

    在这里插入图片描述
    查看当前会话隔离级别:

     SELECT @@session.tx_isolation;
     SELECT @@tx_isolation;
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    设置当前或者全局隔离级别:

    set session/global transaction isolation level 隔离级别; 
    
    • 1

    总结:
    隔离级别越严格 ,安全性越高,但并发性越差
    MySQL 读未提交 存在脏读、幻读、不可重复读的问题,
    读提交存在 幻读、 不可重复读的问题。

  • 相关阅读:
    js设计模式:单例模式
    YOLOv5论文作图教程(2)— 软件界面布局和基础功能介绍
    生成CSR和自签名证书
    如何查看端口占用(windows,linux,mac)
    创业项目找什么?
    【nuxt】插件集合
    bfs提高系列之陨石下落
    感知器算法
    Java——二叉搜索树
    Java 中的 IO 和 NIO
  • 原文地址:https://blog.csdn.net/sqjddb/article/details/126153803