SQLServer数据库实用技术(69)
时间:2007-12-23 来源:不详 作者:迈克DB
11.5.1 锁的概念
锁(Lock) 是在多用户环境下对资源访问的一种限制。机制当对一个数据源加锁后,此数据源就有了一定的访问限制。我们就称对此数据源进行了“锁定”。在SQL Server中,可以对以下的对象进行锁定:
- 数据行(Row):数据页中的单行数据;
- 索引行(Key):索引页中的单行数据,即索引的键值;
- 页(Page):页是SQL Server 存取数据的基本单位,其大小为8KB;
- 盘区(Extent):一个盘区由8 个连续的页组成;
- 表(Table);
- 数据库(Database)。
在SQL Server 中,锁有两种分类方法。
(1) 从数据库系统的角度来看
锁分为以下三种类型:
- 独占锁(Exclusive Lock)
独占锁锁定的资源只答应进行锁定操作的程序使用,其它任何对它的操作均不会被接受。执行数据更新命令,即INSERT、 UPDATE 或DELETE 命令时,SQL Server 会自动使用独占锁。但当对象上有其它锁存在时,无法对其加独占锁。独占锁一直到事务结束才能被释放。 - 共享锁(Shared Lock)
共享锁锁定的资源可以被其它用户读取,但其它用户不能修改它。在SELECT 命令执行时,SQL Server 通常会对对象进行共享锁锁定。通常加共享锁的数据页被读取完毕后,共享锁就会立即被释放。 - 更新锁(Update Lock)
dedecms.com
更新锁是为了防止死锁而设立的。当SQL Server 预备更新数据时,它首先对数据对象作更新锁锁定,这样数据将不能被修改,但可以读取。等到SQL Server 确定要进行更新数据操作时,它会自动将更新锁换为独占锁。但当对象上有其它锁存在时,无法对其作更新锁锁定。
内容来自dedecms
(2)从程序员的角度看锁分为以下两种类型:
- 乐观锁(Optimistic Lock)
乐观锁假定在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁、即完全依靠数据库来治理锁的工作。一般情况下,当执行事务处理时SQL Server会自动对事务处理范围内更新到的表做锁定。 - 悲观锁(Pessimistic Lock)
悲观锁对数据库系统的自动治理不感冒,需要程序员直接治理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。
11.5.3 隔离级别
隔离(Isolation) 是计算机安全学中的一种概念,其本质上是一种封锁机制。它是指 自动数据处理系统中的用户和资源的相关牵制关系,也就是用户和进程彼此分开,且和操 作系统的保护控制也分开来。在SQL Server 中,隔离级(Isolation Level) 是指一个事务 和其它事务的隔离程度,即指定了数据库如何保护(锁定)那些当前正在被其它用户或服 务器请求使用的数据。指定事务的隔离级与在SELECT 语句中使用锁定选项来控制锁定 方式具有相同的效果。
在SQL Server 中有以下四种隔离级:
- READ COMMITTED
在此隔离级下,SELECT 命令不会返回尚未提交(Committed) 的数据,也不能返回脏数据。它是SQL Server 默认的隔离级。 - READ UNCOMMITTED 内容来自dedecms
与READ COMMITTED 隔离级相反,它答应读取已经被其它用户修改但尚未提交确定的数据。 - REPEATABLE READ
在此隔离级下,用SELECT 命令读取的数据在整个命令执行过程中不会被更改。此选项会影响系统的效能,非必要情况最好不用此隔离级。 - SERIALIZABLE
与DELETE 语句中SERIALIZABLE 选项含义相同。
SET TRANSACTION ISOLATION LEVEL
{READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE }
文章评论
共有位Admini5网友发表了评论 查看完整内容