MySQL:锁

12/31/2023 后端数据库MySQL

目录


参考:


# MySQL:锁

MySQL的InnoDB存储引擎锁机制分为表级锁和行级锁。

# 一、行级锁

行级锁中有共享锁和排它锁。

MySQL的InnoDB存储引擎默认的修改数据语句(update/delete/insert)都会自动给涉及到的数据加上排他锁,查询语句(select)默认不会加任何锁类型。

# 1.1 共享锁

共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

select * from t_user where id = 10 lock in share mode;
1

# 1.2 排他锁

排他锁又称为写锁(独占锁),简称X锁,顾名思义,排他锁就是不能与其他锁并存。如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁。

select * from t_user where id = 10 for update;
1

# 1.3 行级锁的优劣

  • 行锁的劣势:开销大;加锁慢;会出现死锁。
  • 行锁的优势:锁的粒度小,处理并发的能力高。

# 二、表级锁

表级锁中有意向共享锁和意向排它锁。

MySQL的InnoDB存储引擎意向锁是自动加的,不需要用户干预。

# 2.1 意向共享锁

意向共享锁(IS):表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的意向共享锁;

# 2.2 意向排他锁

意向排他锁(IX):类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的意向排他锁。

# 2.3 表级锁的优劣

  • 表锁的优势:开销小;加锁快;无死锁。
  • 表锁的劣势:锁粒度大,并发处理能力低。
上次更新时间: 9/25/2024, 1:17:45 AM