共享锁
1. 共享锁允许多个用户同时读取同一份数据,但是不允许其中任何一个用户对数据进行修改; 2. 共享锁与共享锁之间是互相兼容的,即一个事务持有共享锁时另外的事务也可以获取共享锁,但是不兼容排他锁; 3. 共享锁的语法:SELECT ... LOCK IN SHARE MODE或SELECT ... FOR SHARE。
排他锁
1. 排他锁会阻塞其他用户对同一个数据对象的读请求和写请求; 2. 排他锁与排他锁之间是互不兼容的,与共享锁也是不兼容的; 3. 排他锁可以防止死锁的发生,因为一个事务持有排他锁时,另外的事务是无法获取到共享锁或排他锁的; 4. 排他锁的语法:SELECT ... FOR UPDATE。
行级锁
1. 行级锁是MySQL中最细粒度的锁,只针对需要修改的行进行加锁,可以在保证高并发性的同时保证数据的一致性和完整性; 2. 只有在需要进行修改操作时,才会对需要修改的行进行加锁,避免了为整张表加锁带来的性能瓶颈; 3. 行级锁的语法:SELECT ... FOR UPDATE或SELECT ... LOCK IN SHARE MODE; 4. 行级锁的种类:共享锁(S锁)和排他锁(X锁),可以通过不同的语句实现不同的锁方式。
除了上述三种锁之外,MySQL还有表级锁和元数据锁,但是其使用频率较小,此处不作详述。