mysql锁

mysql

mysql锁

 

  • 宏观
    • 数据库锁
      • 粒度小,方便用于集群环境
    • 代码锁
      • 粒度大,需要封装
  • 微观
  • innodb
    • 分类(种类)
    •     for update 仅适用于InnoDB,并且必须开启事务,在begin与commit之间才生效。
      • 行锁&表锁
      • `只有明确指定主键,才会执行行锁,否则执行表锁`
        • 无锁
        • `主键不存在`
          • select * from user where id = -1 for update
        • 行锁
          • select * from user where id = 1 for update
          • select * from user where id = 1 and name = 'kkk' for update
        • 表锁
        • `主键不明确`
          • select * from user where name = 'kkk' for update
          • select * from user where id <> 3 for update
    • 锁算法(机制)
      • 行锁算法
      • Innodb锁机制:Next-Key Lock 浅谈     InnoDB有三种行锁的算法:
      •     1,Record Lock:单个行记录上的锁。
      •     2,Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。
      •     3,Next-Key Lock:1+2,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。
        • Record Lock(普通行锁)
        • Gap Lock(间隙锁)
        • Next-key Lock(行 & 间隙)
      • 表锁算法
        • Mysql 锁和锁算法 意向锁
        •     意向锁在 InnoDB 中是表级锁,意向锁分为:
        •  
        •     意向共享锁:表达一个事务想要获取一张表中某几行的共享锁。
        •  
        •     意向排他锁:表达一个事务想要获取一张表中某几行的排他锁。
        • 自增锁
        •     自增长锁是一种特殊的表锁机制,提升并发插入性能。对于这个锁有几个特点:
        •  
        •     在 SQL 执行完就释放锁,并不是事务执行完。
        •  
        •     对于 insert...select 大数据量插入会影响插入性能,因为会阻塞另外一个事务执行。
        •  
        •     自增算法可以配置。
    • 实现
      • 共享锁&排它锁
      • Mysql 锁和锁算法     InnoDB 锁类型
      •     S or X (共享锁&排他锁)
      •     在 InnoDB 中实现了两个标准的行级锁,可以简单的看为两个读写锁:
      •  
      •     S 共享锁:又叫读锁,其他事务可以继续加共享锁,但是不能继续加排他锁。
      •  
      •     X 排他锁:又叫写锁,一旦加了写锁之后,其他事务就不能加锁了。
      •  
      • IS or IX (共享&排他)意向锁
      • 意向锁在 InnoDB 中是表级锁,意向锁分为:
      •  
      • 意向共享锁:表达一个事务想要获取一张表中某几行的共享锁。
      •  
      • 意向排他锁:表达一个事务想要获取一张表中某几行的排他锁。
        • 行锁和表锁是粒度;共享锁和排他锁是实现
        • 共享锁(s)
          • select ... lock in share mode
        • 排它锁(x)
          • 某个事物加了排它锁,其他事物可以进行无锁读取:select * from user
          • insert;delete,update,select ... for update
      • 乐观锁&悲观锁
        • 不管什么所都要加失败重试
        • 乐观锁
          • u pdate user set  name = 'kkk' where id = 1 and version = 1+1
        • 悲观锁
          • insert;delete,update,select ... for update
  • 原理
    • Mysql锁原理浅谈
    • Mysql锁原理浅谈 MySQL的锁机制和加锁原理
    • MySQL的锁机制和加锁原理 MySQL/InnoDB中的行锁和表锁问题
    • ​ 首先我们知道InnoDB默认支持的是行锁,但这并不代表InnoDB不支持表锁。必须明白这一点在InnoDB中并不是在数据行上加锁,而是在对应的索引上加锁,这一点和oracle并不同,后者是在数据行上加锁的。这种实现的特点是:`只有通过索引条件检索数据的时候加的是行锁,否则加表锁!`
      • 只有通过索引条件检索数据的时候加的是行锁,否则加表锁!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值