锁的分类有很多,根据颗粒度来划分有表锁和行锁,根据行为来划分有读锁和写锁。
1.表锁和行锁
表锁:对一整个表都进行限制的锁
行锁:只对特定的行限制的锁
2.读锁和写锁
读锁(read):当前会话和其他会话都可以读表,但不能修改表
写锁(write):当前会话可以读写表,但其他会话既不能写也不能读
#加锁语句 lock table table_name lock_type
#释放语句 unlock tables;
#当使用lock table语句时,其后的操作只能访问被锁定的表,而不能访问其他表
3.共享锁与排他锁
select…… lock in share mode共享锁
#别的会话可以查看但不能修改
select…… for update排他锁
#别的会话既不能修改也不能查看
4.死锁和活锁
死锁:多个进程相互占用对方需要的资源,同时又不释放,造成互相等待的现象
活锁:进程一直拿不到需要的资源,造成等待的现象。
5.悲观锁和乐观锁
悲观锁:正如其名,具有强烈的独占和怕他特性
乐观锁:避免了数据库加锁开销,大大提高了大并发量下的整体性能表现