MySQL锁

锁的分类有很多,根据颗粒度来划分有表锁和行锁,根据行为来划分有读锁和写锁。

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.悲观锁和乐观锁

悲观锁:正如其名,具有强烈的独占和怕他特性

乐观锁:避免了数据库加锁开销,大大提高了大并发量下的整体性能表现