锁有两种分类方法:从数据库系统角度分类和从程序员的角度分类。
从数据库角度来看,锁可以分为共享锁、独占锁和更新锁。
共享锁:共享锁锁定的资源可以被其他用户读取,但不能修改。在select 命令执行时,SQL server通常会对对象进行共享锁锁定。一般情况下,加共享锁的数据页被读取完毕后,共享锁就会立即被释放
独占锁:独占锁锁定的资源只允许进行锁定操作的程序使用,对他的任何操作均不会被接受。执行数据更新命令,即INSERT,UPDATE或DELETE命令时,SQL Sever会自动使用独占锁。但当对象上有其它锁存在时,无法对其加独占锁。更新操作结束,独占锁才能被释放。
更新锁:更新锁是为了防止死锁而设立的。当SQL server 准备更新数据时,它首先对数据对象作更新锁锁定,这样数据将不能被修改,但可以读取。等到SQL server 确定要进行更新数据操作时,它会自动将更新锁换为独占锁。但当对象对象上有其他所存在时,无法对其作更新锁锁定。
从程序员的角度来看,锁分为乐观锁和悲观锁
乐观锁:乐观锁是指在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁,即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时,SQL server 会自动对事务处理范围内更新到的表做锁定。
悲观锁:悲观锁不采用数据库系统的自动管理,需要程序员直接管理数据或对象上的加锁处理,并负责获取共享和放弃正在使用的数据上的任和锁。
从数据库角度来看,锁可以分为共享锁、独占锁和更新锁。
共享锁:共享锁锁定的资源可以被其他用户读取,但不能修改。在select 命令执行时,SQL server通常会对对象进行共享锁锁定。一般情况下,加共享锁的数据页被读取完毕后,共享锁就会立即被释放
独占锁:独占锁锁定的资源只允许进行锁定操作的程序使用,对他的任何操作均不会被接受。执行数据更新命令,即INSERT,UPDATE或DELETE命令时,SQL Sever会自动使用独占锁。但当对象上有其它锁存在时,无法对其加独占锁。更新操作结束,独占锁才能被释放。
更新锁:更新锁是为了防止死锁而设立的。当SQL server 准备更新数据时,它首先对数据对象作更新锁锁定,这样数据将不能被修改,但可以读取。等到SQL server 确定要进行更新数据操作时,它会自动将更新锁换为独占锁。但当对象对象上有其他所存在时,无法对其作更新锁锁定。
从程序员的角度来看,锁分为乐观锁和悲观锁
乐观锁:乐观锁是指在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁,即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时,SQL server 会自动对事务处理范围内更新到的表做锁定。
悲观锁:悲观锁不采用数据库系统的自动管理,需要程序员直接管理数据或对象上的加锁处理,并负责获取共享和放弃正在使用的数据上的任和锁。