什么是锁
锁机制是并发控制的需要,分为共享锁和排他锁(也叫读锁和写锁)。
读锁是相互不阻塞的,即多个客户在同一时刻可以同时读取同一个资源,而互不干扰。
写锁是排他的,会阻塞其他的写锁和读锁。
锁粒度
锁粒度,就是锁的范围。理想情况下,锁的范围越小越好,只对会修改的数据片进行精准的锁定。即锁定的数据量越少,则系统的并发程度越高,只要相互之间不发生冲突即可。
加锁会消耗资源。
锁策略
所谓的锁策略,就是在锁的开销和数据的安全性之间寻求平衡,这种平衡当然也会影响性能。
每种 MySQL 存储引擎都可以实现自己的锁策略和锁粒度。
表锁
表锁是 MySQL 中最基本的锁策略,并且是开销最小的策略。
尽管存储引擎可以管理自己的锁,MySQL 本身还是会使用各种有效地表锁来实现不同的目的。例如,服务器会为诸如 ALTER TABLE
之类的语句使用表锁,而忽略存储引擎的锁机制。
行级锁
行级锁可以最大程度地支持并发处理(同时也带来了最大的锁开销)。
行级锁只在存储引擎层实现。
服务器层完全不了解存储引擎中锁的实现。