mysql锁

java中的锁:

  1. 线程是否需要同步资源

    1. 需要--悲观锁
    2. 不要--乐观锁
  2. 多线程竞争顺序问题
    1. 排队--公平锁
    2. 插队失败再排队--非公平锁
  3. 多线程能否共享一把锁
    1. 共享--共享锁
    2. 独占--独占锁
  4. 同一线程是否可以重复获取一把锁
    1. 可以--可重入锁
    2. 不行--不可重入锁
  5. 是否能中断
    1. 可以--可中断锁
    2. 不可--非可中断锁
  6. 等锁的过程
    1. 自旋--自旋锁
    2. 阻塞--非自旋锁

锁概述:

  1. 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免资源争抢,解决并发)

锁分类:

  1. 对数据操作粒度分:
    1. 表锁:操作时,锁定整张表
      1. 开销小,加锁快,不死锁,粒度大,锁冲突概率大 , 并发低, Myisam默认
    2. 行锁:操作时,锁定当前操作行
      1. 开销大,加锁慢,会死锁, 粒度小,锁冲突概率小 , 并发高, innodb默认
  2. 对数据操作类型分:
    1. 读锁(共享锁):同一份数据,多哥读操作同时进行,不会相互影响
    2. 写锁(排它锁):当前操作没有完成之前,会阻断其他写锁和读锁
  3. myisam中的锁:

    1. 加读锁:lock table table_name read;
    2. 加写锁:lock table table_name write;
    3. 我们不用手动加,MyISAM查询前会自动加
  4. myisam锁解释:
    1. 对myisam表的读操作:
      1. 不会阻塞其他用户对同一表的读请求,会阻塞对同一表的写请求
    2. 写操作时
      1. 会阻塞 读和写的操作
    3. myisam的读写锁是写优先,所以不适合做写为主的表的引擎,因为大量的更新会使查很难得到锁

Innodb行锁:

  1. 支持事务
  2. 事务介绍:

  3. 是有一组SQL语句组成的逻辑处理单元
  4. 有4个属性,简称ACID
    1. 原子性:
      1. 事务是一个操作单元,对数据的修改,要么全部成功,要么全部失败
      2. 一致性:在食物开始和完成时,数据都必须保持一致状态
      3. 隔离性:数据库提供隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
      4. 持久性:事务完成后,对数据的修改是永久的
  5. 对于innodb行锁优化:

    1. 尽可能让所有数据检索都通过索引来完成,避免无索引导致行锁升级为表锁
    2. 合理设计索引, 尽量缩小锁的范围
    3. 控制事务大小,减少锁定资源量和时间长度
    4. 尽可能使用低级别事务隔离
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值