事务的隔离性
一、锁 1、锁的概述 InnoDB存储引擎中,事务的隔离性主要是由锁机制实现的。开发多用户的应用,很大的一个难点就在于并发访问:一方面既要最大程度地实现数据库的并发访问,另一方面又要确保每个用户能以一致的方式读取、修改数据,为此,我们需要锁机制。 锁机制是数据库系统区别于文件系统的另一个关键特性,锁机制用于管理对共享资源的并发访问,保证数据的完整性和一致性。这里的共享资源不仅仅是行数据,还包括缓冲池中的LRU列表,删除、添加、移动LRU列表中的元素时,有需要锁来保证一致性。 2、锁的类型 (1)共享/排他锁 MySQL提供了两种锁的粒度:行级锁、表级锁。一般而言,锁的粒度越小,并发度越高;锁用得越多,开销越大(锁的各种操作如获取锁、释放锁、检查锁状态等都会增加系统开销)。因此我们通常只锁定尽可能少的数据量,另外我们需要在锁开销和并发度之间找好平衡点。 InnoDB存储引擎提供两种行级锁: 共享锁(S Lock):允许事务读一行数据; 排他锁(X Lock):允许事务删除或更新一行数据。 如果事务T1已经获得行r的共享锁,那么事务T2可以立即获得行r的共享锁以读取数据(锁兼容);如果事务T1已经获得行r的共享锁/排他锁,那么事务T2要想获得行r的排他锁/共享锁或排他锁必须等待事务T1释放锁(锁不兼容)。共享锁和排他锁均用在事务中,随着事务的结束而释放。 (2)意向锁