无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制问题。下面讨论MySQL在2个层面上的并发控制:服务器层和存储引擎层。
在处理并发读或写的时候,可以通过实现一个由两种类型的锁组成的锁系统来解决问题:共享锁和排他锁(读锁和写锁)。
一种提高共享资源并发性的方式是让锁定的对象更有选择性,尽量只锁定需要修改的部分,而不是所有的资源。
下面介绍MySQL的两种最重要的锁策略:
表锁:
开销最小的锁策略,锁定整张表。
行级锁:
最大程度上支持并发处理,行级锁只在存储引擎层面实现,而MySQL服务层没有实现。
注:数据库逻辑结构
第一层,服务层(为客户端服务):为请求做连接处理,授权认证,安全等。
第二层,核心层:查询解析,分析,优化,缓存,提供内建函数;存储过程,触发器,视图。
第三层,存储引擎层,不光做存储和提取数据,而且针对特殊数据引擎还要做事务处理。
意向锁:
如果没有意向锁的话,则需要遍历所有整个表判断是否有行锁的存在,以免发生冲突
如果有了意向锁,只需要判断该意向锁与即将添加的表级锁是否兼容即可。因为意向锁的存在代表了,有行级锁的存在或者即将有行级锁的存在。因而无需遍历整个表,即可获取结果。