• MySQL事务的隔离级别


    事务的隔离级别

    并发务带来的问题

    • 脏写(Dirty Write):如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写。

     

    • 脏读(Dirty Read):如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发生了脏读。

     

    • 不可重复读(Non-repeatable Read):如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,那就意味着发生了不可重复读。

     

    • 幻读(Phantom):如果一个事务先根据某些条件查询出一些记录,之后另一个事务有向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来,那就意味发生了幻读。注意:幻读强调的是一个事务按照某个相同条件多次读取记录时,后读取时读到了之前没读到的记录。如果是后读取记录变少了,就不是幻读,相当于每一条记录都发生了不可重复读的现象。

     

    • 幻读问题的产生是因为某个事务读了一个范围的记录,之后别的事务在该范围内插入了新记录, 该事务再次读取该范围的记录时,可以读到新插入的记录,所以幻读问题准确的说并不是因为读取 和写入一条相同记录而产生的。

    事务的隔离级别

    READ UNCOMMITTED: 未提交读

    READ COMMITTED:已提交读

    REPEATABLE READ :可重复读

    SERIALIZABLE:可串行化

    针对不同隔离级别,并发事务可以发生的问题不同:每个级别都不可能发生脏写

    • READ UNCOMMITTED(未提交读):可能发生脏读,不可重复读和幻读问题

    • READ COMMITTED(已提交读):可能发生不可重复读和幻读问题,但不可能发生脏读问题

    • REPEATABLE READ(可重复读):可能发生幻读问题,但不可能发生脏读和可重复读问题

    • SERIALIZABLE(可串行化):各种问题都不可能发生

    MySQL 虽然支持4种隔离级别,但与 SQL标准 中所规定的各级隔离级 别允许发生的问题却有些出入,MySQL在REPEATABLE READ(可重复读)隔离级别下,是可以禁止幻读问题的发生的

     

    MySQL 的默认隔离级别为 REPEATABLE READ(可重复读)

    查看隔离级别

    1.  show variables like 'transaction isolation';
    2.  -- 或者
    3.  select @@transaction_isolation-

    我们可以手动更改事务的隔离级别:

     set [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL (级别);

    设置事务的隔离级别的语句中,在 SET 关键字后可以放置 GLOBAL 关键字、 SESSION 关键字或者什么都不放,这 样会对不同范围的事务产生不同的影响,具体如下:

    • 使用GLOBAL关键字(在全局范围影响):只对执行完该语句之后的会话起作用,当前已经存在的会话无效

    • 使用SESSION关键字(在会话范围影响):对当前会话的所有后续的事务有效;该语句可以在已经开启的事务中间执行,但不会影响当前正在执行的事务,如果在事务之间执行,则对后续的事务有效。

    • 两个关键字都不使用(只对执行语句后的下一个事务产生影响):只对当前会话中下一个即将开启的事务有效;下一个事务执行完后,后续事务将恢复到之前的隔离级别;该语句不能在已经开启的事务中间执行,会报错。

  • 相关阅读:
    蓝牙协议文档下载
    iwebsec靶场 SQL注入漏洞通关笔记8- 大小写过滤注入
    解决 jenkins 插件下载失败问题 - 配置 jenkins 插件中心为国内镜像地址
    JUC第十五讲:JUC集合-ConcurrentHashMap详解(面试的重点)
    RocketMQ中msg&tag的生命周期
    Games101作业0(vscode连接VB虚拟机)
    js 数组中相同类型的数据合并,并把相应的数据添加
    全力助推徐工集团转型升级,迅镭激光智能装备展现硬核实力!
    【动态规划】leetcode 96. 不同的二叉搜索树
    使用手机作为电脑的麦克风和摄像头外设
  • 原文地址:https://blog.csdn.net/qq_53916344/article/details/125429392