独占锁
独占锁,又称为写锁、排它锁、X锁
MySQL在执行UPDATE, INSERT,DELETE 的时候默认会加独占锁。
当事务A在某一行上面加了独占锁,其他事务就不能再加独占锁了。
MySQL通过独占锁,解决了多事务并发更新冲突的问题(即脏读的问题)
共享锁
MySQL可以通过 SELECT .. lock in share mode 的方式加共享锁。当事务A在某一行上面加了共享锁后,其实就是通知其他事务,我正在读取这行数据,你们谁也不能对它进行修改。
共享锁之间并不冲突,但是共享锁和独占锁冲突。
共享锁存在的目的主要是防止此时大量的并发写。MySQL因为MVCC机制的存在,undo log链会很长,影响读性能。
总结
| 锁类型 | 独占锁 | 共享锁 |
|---|---|---|
| 独占锁 | 互斥 | 互斥 |
| 共享锁 | 互斥 | 不互斥 |