锁相关

1.MyISAM与InnoDB关于锁方面的区别是什么

  • InnoDB

    • 默认使用的是行级锁,也支持表级锁
    • 涉及有索引的sql语句使用行级锁,没有走索引的sql语句直接使用的时表锁
  • MyISAM

    • 默认用的是表级锁,不支持行级锁
    • 1.表级锁会锁住整张表

2.锁类型

  • 共享锁:

    • 用于不更改或者不更新数据只读的操作,如select语句,例如事务T对数据A加上共享锁后,其他事务只能对A再加上共享锁,只能读数据,不能修改数据
    • 对于select 语句InnoDB一般情况下是不会加共享锁,(正常情况能查询就代表没有排他锁,如果存在的话 等待就是了),如果需要测试,可以关闭autocommit 自动提交,然后开启两个会话进行测试
    • 显示添加共享锁:SELECT … LOCK IN SHARE MODE;
  • 排他锁:

    • 用于修改数据的操作,如Insert/Update/Delete 确保不会同时对同一资源进行更新
    • 对于Inser/Update/Delete InnoDB会自动给涉及的数据加上排他锁
    • 显示添加排他锁:SELECT … FOR UPDATE;
  • 乐观锁:

    • 想法很乐观,认为这次的数据操作不会造成数据冲突,在处理数据前不对数据进行加锁,而是在更新时,判断

    • 示例

      • 在这里插入图片描述
  • 间隙锁

    • 当我们用范围条件条件检索数据(非聚簇索引、非唯一索引),并请求共享或排他锁时,InnoDB会给符合条件的数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,称为间隙,InnoDB也会为这些间隙加锁,即间隙锁。

    • 需要满足的三个条件

      • 1.隔离级别未RR
      • 2.当前读
      • 3.查询条件能够走到索引
    • 作用

      • 间隙锁的目的是为了让其他事务无法在间隙中新增数据。
      • 防止在间隙中执行insert语句
      • 防止将已有数据update到间隙中
  • 意向锁

    • 数据库自身行为,不需要人工干预,在事务结束的时候会自行解除
    • 意向锁的主要作用是提升存储引擎性能,innoDB中的S锁和X锁是行锁,每当事务到来时,存储引擎需要遍历所有行的锁持有情况,性能较低,因此引入意向锁,检查行锁前先检查意向锁是否存在,如果存在则阻塞线程。
  • 相关地址:

    • https://blog.csdn.net/weixin_45395031/article/details/108803340
    • https://www.cnblogs.com/zhaoshaopeng/p/13527651.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值