美文网首页
mysql : 行锁,表锁,共享锁,排他锁,悲观锁,乐观锁

mysql : 行锁,表锁,共享锁,排他锁,悲观锁,乐观锁

作者: timothyue1 | 来源:发表于2020-07-24 14:27 被阅读0次

1.表级锁与行级锁

表级锁:

table-level locking,锁住整个表。

开销小,加锁快。
  不会死锁(一次性加载所需的所有表)。
  锁粒度大,发生锁冲突概率大,并发效率低。
  适合查询。

行级锁:

row-level loking,锁住一行记录。

开销大,加锁慢。
  会死锁。
  锁粒度小,发生所冲突概率小,并发效率高。
  适合并发写,事务控制。
  并不是直接丢记录行加锁,而是对行对应的索引加锁:
  如果sql 语句操作了主键索引,Mysql 就会锁定这条主键索引。
  如果sql语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引。
  在InnoDB中,如果SQL语句不涉及索引,则会通过隐藏的聚簇索引来对记录加锁。
  对聚簇索引加锁,实际效果跟表锁一样,因为找到某一条记录就得扫描全表,要扫描全表,就得锁定表。

引擎与锁:

MyISAM引擎支持表级锁,不支持行级锁。
  InnoDB引擎支持表级锁和行级锁,默认为行级锁。

2.共享锁与排他锁

共享锁:

有称之为S锁、读锁。
  当前线程对共享资源加共享锁,其他线程可以读取此资源、可以继续追加共享锁,但是不能修改此资源、不能追加排他锁。
  语法:select id from t_table in share mode;
  多个共享锁可以共存,共享锁与排他锁不能共存。

排他锁:

又称之为X锁、写锁。
  当前线程对共享资源加排他锁,其他线程不允许读取此资源,不允许追加共享锁,不允许修改此资源,不允许追加排他锁。
 
语法:update t_table set a =1; // 数据库的增删改操作默认都会加排他锁
      select * from t_table for update;// for update也是一种增删改
  排他锁是独占的,不会与其他锁共存。

3.乐观锁与悲观锁
  乐观锁与悲观锁是逻辑上的锁。

乐观锁:

乐观锁:乐观地认为,并发问题很难发生。
  乐观锁虽然认为并发问题很难发生,但并不是不会发生,所以也会有措施防止问题真的产生:每次数据修改都自增版本号version。
  进行数据读取时,并不加锁,而是同时读取当前的版本号version1;在对数据进行修改时,要判断当前的版本号version2是否等于之前的版本号version1。
  版本号不匹配,则代表着并发问题已产生,所以需要回滚此次操作。
  实现方式:版本号机制、CAS。

悲观锁:

悲观锁:悲观地认为,并发问题极易发生。
  悲观锁认为并发问题极易发生,所以每次操作,无论读写,都会对记录加锁,以防止其他线程对数据进行修改。
  实现方式:数据库的行锁、读锁和写锁。

转自:https://www.cnblogs.com/Jomini/p/13219722.html

相关文章

  • rails中乐观锁和悲观锁的使用

    MySQL乐观锁和悲观锁的介绍可以参考之前的一篇文章MySQL中的锁(行锁,表锁,乐观锁,悲观锁,共享锁,排他锁)...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)

    这几个锁按照属性可分为:乐观锁、悲观锁(共享锁,排他锁),行锁、表锁指的是锁粒度。 乐观锁乐观锁就是很乐观的认为,...

  • 乐观锁与悲观锁——解决并发问题

    这几个锁按照属性可分为:乐观锁、悲观锁(共享锁,排他锁),行锁、表锁指的是锁粒度。 乐观锁乐观锁就是很乐观的认为,...

  • 数据库相关问题与解答

    收集常见数据库问题 锁机制介绍:行锁、表锁、排他锁、共享锁,悲观锁、乐观锁。行级锁:开销大,加锁慢;会出现死锁;锁...

  • mysql锁

    mysql锁 性能:乐观锁,悲观锁 操作类型:读锁,写锁,都属于悲观锁 操作粒度:行锁,表锁 乐观锁:一种思想,通...

  • mysql锁记录

    mysql锁 性能:乐观锁,悲观锁 操作类型:读锁,写锁,都属于悲观锁 操作粒度:行锁,表锁 乐观锁:一种思想,通...

  • mysql : 行锁,表锁,共享锁,排他锁,悲观锁,乐观锁

    1.表级锁与行级锁 表级锁: table-level locking,锁住整个表。 开销小,加锁快。不会死锁(一次...

  • mysql 锁

    MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)https://crossoverjie.top/ht...

  • 共享 + 排他锁

    mysql锁机制分为表级锁和行级锁 ,mysql中行级锁中的共享锁与排他锁进行分享交流。 测试语法 begin; ...

网友评论

      本文标题:mysql : 行锁,表锁,共享锁,排他锁,悲观锁,乐观锁

      本文链接:https://www.haomeiwen.com/subject/gevjlktx.html