zoukankan      html  css  js  c++  java
  • MySql各事务隔离级别及锁问题

    聊事务隔离级别和锁问题之前首先得理解事务的隔离级别和共享锁及独占锁的概念:

    事务的隔离级别

      脏读 不可重复读 幻读
    Read uncommitted
    Read committed ×
    Repeatable read × ×
    Serializable × × ×

    独占锁(X锁):独占锁也叫排他锁,是指该锁一次只能被一个线程所持有。如果线程T对数据A加上排他锁后,则其他线程不能再对A加任何类型的锁。获得排它锁的线程既能读数据又能修改数据。

    共享锁(S锁):共享锁是指该锁可被多个线程所持有。如果线程T对数据A加上共享锁后,则其他线程只能对A再加共享锁,不能加排它锁。获得共享锁的线程只能读数据,不能修改数据。

    1、Read uncommitted

    Mysql设置Read uncommitted隔离级别,数据库在修改(update)数据时,使用的是共享锁,所以在修改数据未提交事务时,查询(select)语句是能查到此时修改的数据,如果回滚了修改的数据,则查询到的数据是有问题的,造成了脏读。该隔离级别下查询不加锁,主要涉及到的是共享锁


    2、Read committed

    数据库在修改数据时,使用的是独占锁,查询数据使用的是共享锁,所以在修改数据时执行查询,查询数据会等待修改数据事务提交后,执行查询并返回提交后的结果


    3、Repeatable read

    Mysql默认的隔离级别,加锁情况同Read committed,但是Repeatable read在读取数据后,不会立即释放共享锁,而是要等到事务结束后才会释放


    4、Serializable

    直接对操作的表加表锁,其他事务不能读写该表,效率比较低

  • 相关阅读:
    js中==与===区别
    Initialization failure 0x0000000c
    Spring通过@Value注解注入属性的几种方式
    java中读取配置文件中数据的具体方法
    spring整合hibernate
    url上参数解析笔记
    编号的生成(日期+序列号)
    application.xml & -servlet.xml
    webApplicationContext 与servletContext
    Http协议整理
  • 原文地址:https://www.cnblogs.com/wuzhiyuan/p/13839252.html
Copyright © 2011-2022 走看看