SQL Server数据库高级进阶之锁实战演练
一、SQL Server锁的本质 锁的定义:锁主要用于多用户环境下,保证数据库完整性和一致性的技术。 锁的解释:当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的完整性和一致性。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制。 二、SQL Server锁的分类 锁的分类,在教材上,网络上好多都是按两个维度来描述的。一种维度是按锁的功能来划分,一种维度是按概念来划分。 1)、按概念划分(从程序员的角度看) • 悲观锁(Pessimistic Lock) • 乐观锁(Optimistic Lock) 2)、按锁的功能来划分(从数据库系统的角度来看) • 共享锁 (S) (Shared (S) Locks) 用于不更改或不更新数据的操作(只读操作),如SELECT语句。 • 更新锁 (U) (Update (U) Locks)用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。 • 排它锁 (X) (Exclusive (X) Locks) 用于数据修改操作,例如INSERT、UPDATE或DELETE。确保不会同时对同一资源进行多重更新。 • 意向锁 (I)(Intent Locks)