• 【Mysql】mysql学习之旅06-事务


    mysql学习之旅06-事务

    概念:

    • 事务是为了完成某一项工作或业务的一组步骤的集合
    • 事务是一个完整的整体,不能拆分开
    • 事务在数据库中的表现就是一组sql语句完成某个业务

    特新(ACID):

    • 原子性(Atomicity): 事务是一个整体,不能分割
    • 一致性(Consistency): 事务执行的结果只有两种,全部成功或者全部失败。不存在部分成功或部分失败的情况
    • 隔离性(Isolation): 各个事务之间相互隔离,互不影响
    • 持久性(Durability): 事务执行的结果可以永久保存到数据库或文件中。任何时候都可以查询事务执行的 结果。

    使用:

    1. mysql默认事务是自动提交的
    2. 查看事务自动提交的状态
    select @@AUTOCOMMIT
    或者
    SHOW SESSION VARIABLES LIKE 'AUTOCOMMIT'
    
    • 1
    • 2
    • 3
    1. 可以设置事务提交的模式
    SET AUTOCOMMIT = 0; 关闭
    SET AUTOCOMMIT = 1; 开启
    ### 设置关闭后需要手动提交事务COMMIT,或者回滚事务ROLLBACK
    
    • 1
    • 2
    • 3
    1. 事务使用方式
    • 开启事务:START TRANSACTION; 或者BEGIN;
    • 提交事务:COMMIT;事务成功,事务的处理结果永久保存到数据库
    • 回滚事务:ROLLBACK;事务失败,回滚到事务开始之前的状态,注意自动增长不会回滚
    1. 事务只针对数据库中表的变动,不针对查询

    隔离级别的安全问题

    • 读问题:脏读,不可重复读,幻读
    • 写问题:丢失更新(悲观锁,乐观锁)

    四种隔离级别:

    级别含义备注
    READ UNCOMMITTED读未提交会出现脏读:一个事务读到了另一个事务未提交的数据
    READ COMMITTED读已提交会出现不可重复读:一个事务的数据修改未提交,另一个事务无法进行数据修改操作,在一个事务修改提交之后,另一个事务在它提交前查询和提交后查询结果是不一样的,所以不可重复读取统一数据
    REPEATABLE READ可重复读(mysql)会出现幻读现象:A事务在B事务提交修改之前做了查询,在B事务提交之后,A事务再次查询结果和之前查的结果一样, 并没有查询到B事务提交后的数据
    Serializable可串行化
    查看隔离级别
    SELECT @@tx_isolation
    
    • 1
    设置隔离级别
    SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted
    
    • 1

    sql实操:

    //查看事务自动提交是否开启(1开启,0关闭)
    select @@autocommit;
    //设置手动提交
    set @@autocommit = 0;
    
    //开启一个事务
    start transaction;
    begin;
    
    //提交事务
    commit;
    
    //回滚事务
    rollback;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    《Java核心技术》基于Java 17全面升级
    搜索——flood fill
    Coursera自动驾驶1.1-1.2——自动驾驶基础和软硬件架构
    亿级万物互联新时代的物联网消息中间件EMQX调研
    YOLO系列 --- YOLOV7算法(二):YOLO V7算法detect.py代码解析
    二维数组的最小路径和问题
    有效的括号(Java版)
    什么是 802.1X?它是如何工作的?
    论文被多人研究过了,我还可以怎么写?
    Unity学习笔记:内置粒子系统
  • 原文地址:https://blog.csdn.net/Jeffhan_java/article/details/126157904