Mysql并发控制
最近在看Mysql的并发控制,事务处理等知识,做些整理。 并发控制目的是当多个连接对数据库进行修改时保证数据的一致性。现在mysql的InnoDB在update,delete时使用行级锁,对于select会结合MVCC保证一致性。 1、 并发控制 MySQL提供两个级别的并发控制:服务器级(the server level)和存储引擎级(the storage engine level)。加锁是实现并发控制的基本方法,MySQL中锁的粒度: (1) 表级锁:MySQL独立于存储引擎提供表锁,例如,对于ALTER TABLE语句,服务器提供表锁(table-level lock)。 (2) 行级锁:InnoDB和Falcon存储引擎提供行级锁,此外,BDB支持页级锁。InnoDB的并发控制机制,下节详细讨论。 另外,值得一提的是,MySQL的一些存储引擎(如InnoDB、BDB)除了使用封锁机制外,还同时结合MVCC机制,即 多版本两阶段封锁协议MVCC(Multiversion two-phrase locking protocal) ,来实现事务的并发控制,从而使得只读事务不用等待锁,提高了事务的并发性。 数据库的事务处理的原则是保证ACID的正确性。 2、事务处理 2.1 事务的ACID特性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性: (1)原子性