一、按锁的粒度分类,可分为表级锁、行级锁、页级锁
行级锁:
行级锁是MySQL锁定粒度最小的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,单加锁开销最大。InnoDb支持行级锁。
表级锁:
表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。
页级锁:
页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。BDB支持页级锁
二、按锁级别划分,可分为共享锁、排他锁
共享锁:
共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。
SELECT ... LOCK IN SHARE MODE;
排他锁:
排他锁又称写锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
SELECT ... FOR UPDATE;
三、按加锁方式划分,可分为自动锁、显示锁
INSERT、UPDATE、DELETE InnoDB会自动加排他锁,对于普通SELECT语句,InnoDB不会加任何锁,当然也可以显示加锁。
四、按操作划分,可分为DML锁,DDL锁
DML(data manipulation language):它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。这些语句的操作对于的锁为DML锁
DDL(data definition language):DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。这些语句的操作对于的锁为DDL锁
五、按适用方式划分,可分为悲观锁和乐观锁
悲观锁和乐观锁MySQL是不直接提供的,需要我们自己去用代码实现.
参考:
https://www.jianshu.com/p/61b894093678