Mysql高并发与锁机制

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

Mysql高并发与锁机制

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

Mysql高并发与锁机制
Mysql高并发与锁机制

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

会话一:
Mysql高并发与锁机制
会话二:
Mysql高并发与锁机制

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

相关文章:

  • 2021-07-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2021-11-20
  • 2021-10-08
猜你喜欢
  • 2021-11-22
  • 2021-08-07
  • 2022-12-23
  • 2021-07-13
  • 2021-07-17
相关资源
相似解决方案