• mysql- 锁的种类


    1.表锁

    方法: lock table 表名 read/write

    对表进行read锁的话,当前sessiton对表增删改都会报错,其他session可以查询,增删改需要等待

    对表进行write锁的话,当前sessions可以增删改,其他session只能被阻塞

    如果要释放表锁用“unlock table 表名”的方式进行 ,另外还可以用show open tables查询所有表锁的信息,也可以通过unlock tables来释放所有锁表信息。

    2.行级锁

    行级锁其实就是对table中某一行数据进行lock,某一行数据一旦补lock,只有当前session可以进行修改和删除,其他sesstion可以查询,修改和删除会等待,直到当前session事务结束,也就是commit之后才可以进行。

    行级锁的方法有如下几种

    1.开始事务,对某种where条件的数据进行update或者delete,其他session进行一样where条件update、delete操作会被阻塞,直到当前session commit

    2.在select语名增加for update后缀,这样where条件中数据会被锁定,其他session用一样条件加for update都会同样被阻塞,直到当前session commit。

    3.mysql事务隔离级别

    在mysql中事务隔离级别主要有如下四种

    read uncommitted

    当前session可以读取到其他session update之后数据,但是这样会带来一个问题,如果其他session rollback了,当前session就会读取了脏数据

    read committed

    当前session可以读取到其他session update之后并commit之后数据,未commit的话,当前session读取是老数据。这样会带来一个问题,当前session的数据不可以重复读

    repeatable read

    当前session读取的session开始的数据,selection时感知不到其他session数据修改已commit的变化,对其他session已insert的新数据也读取不到,会带来幻读问题,但是如果update table set age=age-10 where id=1 进行update数据时,会用其他session最新commit后结果进行减10

    此级别是mysql默认方式,我们可以用下语看db启用事务隔离级别

    show variables like '%isolation%'

    serializable

    并行级别,此级别效率较低,在实际业务场景中不会使用

    在mysql中设定session隔离级别用如下方法进行:

    set session transaction isolation level XXXXXXXX

    4.间隙锁

    如果table user中ID字段值有1-10,30-40 50-60,当前sesion如查update范围8-55区间数据,其他session如果要update id为7或59都会被阻塞,因为mysql会产生一个(1,60]的临键锁,是一个很奇葩的功能。

  • 相关阅读:
    在Linux安装Nginx Proxy Manager并结合内网穿透工具实现远程访问管理界面
    2022-09-20 第五组 张明敏 学习笔记
    嵌入式Linux应用开发-Framebuffer 应用编程
    java计算机毕业设计网上花店系统源码+系统+mysql数据库+LW文档+部署文件
    云计算与大数据 第14章 云仿真平台CloudSim习题
    KVM导入Ubuntu Cloud 镜像创建虚机及调整磁盘大小
    探索低代码技术
    【C语言】每日一题(半月斩)——day2
    Kafka怎样完成建立和Broker之间的连接?
    详解AUTOSAR:AUTOSRA软件架构(理论篇—2)
  • 原文地址:https://blog.csdn.net/lin000_0/article/details/127413021