zoukankan      html  css  js  c++  java
  • mysql中的锁

    1.锁的概念

      

    2.锁的分类

      

    二:表锁

    1.对表加锁

      lock table xxxx read

      lock table yyyy write

    2.解锁

      unlock tables

    3.是否加锁

      show open tables

    4.加上读锁

      当前连接:

        可以读

        不能更新

        不能读其他的表

      另外的窗口:   

        可以读

        不能更新

        可以读其他的表

    5.写锁

      当前连接:

        可以读

        可以写

        不能读取别的表

      另外的窗口连接:

        不能读

        不能写

        能读取其他的表

    三:行锁

    1.事务

      ACID属性

      并发事务处理带来的问题

      事务的隔离级别

      查看隔离级别

      设置隔离级别

    2.ACID

      A:atomicity:原子性,要是全部失败,要么全部成功

      C:consistency:操作前后的数据一致性,合理性

      I:isolation:多个并发会不干扰

      D:durability:一旦提交了,就不能回滚了

    3.并发处理出现的问题

      更新丢失:两个或者多个事务选择一行进行处理,由于不知道其他的事务存在,最后的更新覆盖了其他事务的更新

      脏读:老板发工资的例子,多给了,然后员工马上看到了,但是老板突然发现给多了,又取消了,老板又重新修改了,到手的还是正常的,但是员工一开始看到的是没有提交的事务数据,将隔离级别调整为读提交,就可以解决

      不可重复读:员工买东西的例子,员工去买东西了,检测到里面有钱,然后这个时候,钱被家人给取出来了,然后收费系统开始扣钱的时候,又发现钱没有了。一个事务内,两次查询到不同的数据。解决方式,重复读级别。

      重复读:这不是一个问题

      幻读:查岗例子,家人检查今天员工的消费,发现是2000的消费。然后员工又进行了一笔消费3000,并提交了。然后,家人对着消费清单进行打印,则发现打印出来5000。解决方式是串行化 

      

    4.行锁操作

      执行更新操作:

        自己可以查看自己更新的内容

        连接2看不到更新的内容,只有1完成提交才能看到

      同时更新一行数据:

        1没有提交,2则进行阻塞

      同时更新数据,但是不是同一样:

        互不影响

    5.索引失败,行锁变表锁

       

    6.间隙锁

    update employee set name = '0000' where id>3 and id<7
    

      然后

      如果进行更新的时候,id在3和7之间的数据,会被加锁

     

    四:行锁与表锁的区别

    1.区别

      开销:表锁的开销小

      并发度:表锁的并发底

      锁定粒度:表锁的粒度大

      冲突:表锁的冲突高

      加锁快慢:表锁的的加锁快

  • 相关阅读:
    【Java基础】-switch支持的数据类型
    【微服务】微服务间的通信方式
    MyBatis中 #{}与${}的区别
    exeplorer-损坏的映像【错误状态0xc000012f】
    Java异常-常见的运行时异常和非运行时异常
    jvm-GC集合篇一之GC查找可回收垃圾算法
    JVM-栈的内存结构之--方法返回地址
    JVM-虚拟机栈的内部结构之局部变量表
    jvm-虚拟机栈(java栈)
    JVM-运行时数据区之---PC寄存器
  • 原文地址:https://www.cnblogs.com/juncaoit/p/13378903.html
Copyright © 2011-2022 走看看