锁有很多种分法:
- 从封锁程度分:
1、共享锁——要执行select语句需要先得到共享锁。
2、独占锁——要执行update/insert/delete语句需要先得到独占锁。资源上已经放置的锁 第二个事务进行读操作 第二个事务进行更新操作 无 立即获得共享锁 立即获得独占锁 共享锁 立即获得共享锁 等待共享锁释放 独占锁 等待独占锁释放 等待独占锁释放
3、更新锁——在update的初始化阶段用来锁定可能要被更改的资源。一个资源上只能放置一个更新锁,这样有效的避免了死锁(如果只有共享锁和独占锁,则当多个更新同时操作同一个资源的时候,都会等着对方释放共享锁而陷入死锁。)。
update的步骤如下:
首先,获得一个更新锁,读取记录。
接着,将更新锁升级为独占锁,执行更新操作。
- 从操作资源的粒度分:
数据库级锁、表级锁、行级锁等等。粒度越高,事务的隔离性越高,并发性越低。
数据库还支持锁自动升级,将多个低粒度锁如行级锁升级成少量的高粒度锁如表级锁,以降低系统负荷。 - 从应用程序的角度分:
悲观锁、乐观锁,详细见后面的介绍。