理解数据库之Mysql的共享锁与排他锁、行锁与表锁

共享锁

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

排他锁

排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。

注意区别

  1. 共享锁就是指多个事务只能读数据而不能修改数据。(即只读不能改)
  2. 排他锁是指一个事务在一行数据加上锁后,其它事务不能再对其加锁。mysql的默认存储引擎InnoDB默认的修改语句(如update、insert、delete)会自动给涉及到的数据加上排他锁,而select查询语句不会加锁,故普通查询语句其他事务也是可以查询到数据的,同时获取到排他锁的事务既能读数据,又能写数据。
  3. 如果加排他锁可以使用select …for update语句,加共享锁可以使用select … lock in share mode语句。

Mysql的行锁和表锁

表级锁: 每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;

行级锁: 每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

你可能感兴趣的:(数据库)