专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

mysql的锁有哪些? mysql中的锁有哪些

ins518 2024-11-14 16:41:34 技术文章 8 ℃ 0 评论

之前使用oracle的时候通常情况下知道的只有行锁和表锁。

  1. 行锁是锁定某行的数据。

2. 表锁是锁定某张表。

除此之外,还有如下这些锁:

3. 数据库锁:就是锁定整个库,通常情况下是在数据迁移的时候使用。

4. 页级锁:这个是介于行级锁和表级锁之间的锁,锁定一页的数据。一次锁相邻的一页数据。

从锁的类别上可以分为共享锁和排他锁:

1. 共享锁:相当于是读锁,一个事务添加了读锁之后,其他事务还是可以添加读锁,但是不可以先加写锁。

2. 排他锁:只有一个事务能够添加,其他锁只能等着释放。比如读锁。

mysql还和oracle有一点不一样的是mysql还有不同的存储引擎,常用的myisam只支持表级锁,innodb才支持不同的行锁。表锁的有点是锁的粒度大,简单,耗费的资源少,但是缺点是并发度低。也许这也是innodb存储引擎能够被更广泛使用的原因之一。

InnoDB存储引擎的锁的算法有三种

1. 记录锁:也是行锁的一种,是可以锁定某条记录。

2. 间隙锁:是可以锁定某个区间,但是不包含记录本身。比如锁定大于3小于30的所有数据。

3. Next-key lock:record+gap 锁定一个范围,包含记录本身。

相关知识点:

  1. innodb对于行的查询使用next-key lock
  2. Next-locking keying为了解决Phantom Problem幻读问题
  3. 当查询的索引含有唯一属性时,将next-key lock降级为record key
  4. Gap锁设计的目的是为了阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生
  5. 有两种方式显式关闭gap锁:(除了外键约束和唯一性检查外,其余情况仅使用record lock) A.将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1


------------------------

欢迎访问个人网站:

https://lessthinker.com

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表