MySQL 内部锁

Posted 1994july

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 内部锁相关的知识,希望对你有一定的参考价值。

行级锁

对数据库的行记录进行加锁

优点:

  • Fewer lock conflicts when different sessions access different rows.
  • 当不同会话访问不同的行时会减少锁的冲突
  • Fewer changes for rollbacks.
  • 在回滚的时候会减少修改量
  • Possible to lock a single row for a long time.
  • 可以长时间锁定单独的一条行记录

表级锁

对正在访问的整个表进行加锁

优点:

  • Relatively little memory required (row locking requires memory per row or group of rows locked)
  • 相对低的内存需求
  • Fast when used on a large part of the table because only a single lock is involved.
  • 对表的许多地方进行更新时,只涉及一个锁,因此非常块
  • Fast if you often do GROUP BY operations on a large part of the data or must scan the entire table frequently.
  • 在经常执行 GROUP BY 操作,或者需要频繁扫描整个表的情况下,非常块。

mysql 对表加写锁的过程:

  1. 如果没有锁加在表上,那么给表加上写锁
  2. 否则,将加锁的请求添加到写锁队列

MySQL 对表加读锁的过程:

  1. 如果没有写锁加在表上,那么给表加上读锁
  2. 否则,将加锁的请求添加到读锁队列。

选择锁的类型

通常来说,表级锁在以下的情况下优于行级锁:

  • 对表操作的语句是是读操作
  • 对表操作的语句混合了读和写,并且写操作只更新删除 通过key获取的一条记录
UPDATE tbl_name SET column=value WHERE unique_key_col=key_value;
DELETE FROM tbl_name WHERE unique_key_col=key_value;
  • SELECT语句混合了并发的INSERT语句,并且只有少量的UPDATEDELETE语句
  • 对表的有大范围扫描或 对整个进行GROUP BY,而没有写者。

来源:http://www.1994july.club/seojishu/

以上是关于MySQL 内部锁的主要内容,如果未能解决你的问题,请参考以下文章

java并发线程锁技术的使用

java开发的项目案例,大厂内部资料

MySQL系列:kafka停止命令

如何看mysql版本

硬核!管理mysql数据库的工具

并发包java.util.concurrent.locks.Lock