共享锁和独占锁

439 阅读1分钟

独占锁

独占锁,又称为写锁、排它锁、X锁
MySQL在执行UPDATE, INSERT,DELETE 的时候默认会加独占锁。 当事务A在某一行上面加了独占锁,其他事务就不能再加独占锁了。
MySQL通过独占锁,解决了多事务并发更新冲突的问题(即脏读的问题)

共享锁

MySQL可以通过 SELECT .. lock in share mode 的方式加共享锁。当事务A在某一行上面加了共享锁后,其实就是通知其他事务,我正在读取这行数据,你们谁也不能对它进行修改。
共享锁之间并不冲突,但是共享锁和独占锁冲突。
共享锁存在的目的主要是防止此时大量的并发写。MySQL因为MVCC机制的存在,undo log链会很长,影响读性能。

总结

锁类型独占锁共享锁
独占锁互斥互斥
共享锁互斥不互斥