Mysql高并发与锁机制

Mysql高并发与锁机制
  • 很多数据会涉及到高并发,比如12306的抢票,淘宝上面的库存,一次只能被一个用户所修改,如果被多个用户修改就会造成很严重的后果,所以mysql就引入 锁 的机制,让信息一次只能被一个用户锁修改。
  • 锁也是有很多钟的锁,有表锁和行锁
  • 表锁的概念就是当某个事务在对一个表的数据在进行修改的时候,另外的事务时不能修改这个表
  • 行锁的概念就相当于某个事务在处理表中某行数据的时候,另外的事务不能够对这行进行修改
  • 表锁封锁的过于紧了 所以在项目钟常常是使用表锁
  • mysql的Innodb引擎就是支持表锁的一个引擎
    在这里插入图片描述
索引对表的影响

在这里插入图片描述

  • 当我们修改或者删除表的给的where条件不是主键的时候,使用客户端就会触发安全模式,安全模式下会阻止我们继续操作,所以我们可以使用 SET SQL_SAFE_UPDATES = 0; 来关闭安全模式
  • 行锁的好处就是在于一个事务修改一个表中某行数据的时候,另外一个事务可以对表的其他数据进行操作,但是这些的前提都是我们修改表数据的时候给的where条件是索引条件,如果不是索引条件,就算我们引擎选择的是Innodb,也会转化为表锁
  • 索引是字段的一个属性特征,主键默认也是索引。
    使用ALTER TABLE table_name ADD INDEX index_name ( column ) 可以添加索引
悲观锁

在这里插入图片描述
在这里插入图片描述

  • 悲观锁常用于商品抢购网站,铁路12306之类的网站上使用,位的就是避免多个用户抢购量少的商品。
  • 悲观锁的等级高于表锁,表锁只是会禁止其他事务修改表的数据,悲观锁会禁止其他事务查看表
  • 使用悲观锁需要在每个事务的最开始的一行代码加上 for update关键字,在for update关键字这行和之后的代码就会默认处于悲观锁中
表锁的操作
读锁

会话一:
在这里插入图片描述
会话二:
在这里插入图片描述

  • 当一个会话给某表设置了读锁之后,其他的会话都只能对这个表进行查询工作,都不能执行修改,更新,删除操作,包括设置读锁的这个会话也是一样不能进行这些操作,只能读取信息
  • 只有在这个会话解锁了以后,所有的会话才能使用我完整的功能
  • 使用 lock table 表名 read设置读锁
  • 使用 unlock tables解锁
写锁
  • 当一个会话给某个表设置了写锁之后,当前会话还可以读取改表的信息,但是不能够写入数据,其他会话连读取都读取不廖,就更别提写了。
  • 使用 lock table 表名 write设置写锁
  • 使用 unlock tables解锁
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值