• Mysql_13 事务


    事务

    事务是一组不可分割的操作集合,要么都成功执行,要么都失败。如银行账户数据库操作,一个人给另一个人转账1000元,那么这两个人的update操作就是不可分割的,不然如果有一个操作成功执行另一个没有,就可能银行平白无故少了1000或者收款人没收到钱。

    事务的步骤:

    1. 开启事务
    2. 执行一条条操作。这期间如果有失败则事务回滚。
    3. 全部执行完后提交事务。默认mysql是自动提交事务的,每执行一条语句就会提交一条。

    开启事务

    select @@autocommit;
    
    • 1

    1:自动提交

    0:手动提交

    set @@autocommit=0;-- 开启手动提交
    
    rollback;-- 回滚
    
    commit;-- 提交
    
    • 1
    • 2
    • 3
    • 4
    • 5

    或者在@@autocommit=1时临时开启事务:

    start transaction;-- 开启事务
    
    • 1

    事务四大特性 ACID

    atomicity 原子性:事务是不可分割的最小操作单元。

    consistency 一致性:所有数据保持一致状态。

    isolation 隔离性:事务不受外部干扰,独立进行。

    durability 持久性:提交或回滚后,事务对数据库的操作就是永久的。

    并发事务问题

    多个事务同时进行时会出现的问题。

    脏读:一个事务读到另一个事务未提交的数据(Read uncommitted会发生)

    在这里插入图片描述

    解决后:(给要读取的左边的窗口设置 read-committed 隔离级别)

    在这里插入图片描述

    不可重复读:一个事务前后读了同一个数据两次,两次值不一样。因为其他事务在这中间提交过一次。

    在这里插入图片描述

    幻读:一个事务插入一条不存在的数据时,其他事务先插入了,导致它插入失败。

    在这里插入图片描述

    开启序列化后,其他事务插入会卡住,等待当前事务插入完成后再执行插入操作。

    解决并发问题——隔离级别

    在这里插入图片描述

    select @@TRANSACTION_ISOLATION;
    
    • 1

    如上语句查看当前数据库隔离级别。

    set session/global TRANSACTION ISOLATION LEVEL SERIALIZABLE;-- 设置当前会话/全局事务隔离级别为serializable
    
    • 1
  • 相关阅读:
    PyTorch语音识别的理论基础——MFCC
    新人学习笔记之(注释和关键字)
    基于apache paimon实时数仓全增量一体实时入湖
    【Pandas总结】第六节 Pandas 添加列
    【DFS】1254. 统计封闭岛屿的数目
    RandomAccessFile实现断点续传
    centos7系统查看防火墙状态
    优品汇系统开发机制介绍
    巧用 “火焰图” 快速分析链路性能
    电脑上玩GBA游戏(GBA模拟器)
  • 原文地址:https://blog.csdn.net/jtwqwq/article/details/126137003