封锁的概念

来源:互联网 发布:聚推吧软件 编辑:程序博客网 时间:2024/04/30 03:13

封锁是数据库实现并发控制的重要技术。封锁就是事务T在操作该数据对象(比如一个行、一个数据页、一个表等)之前先对其申请加锁。申请加锁后该事务就对该数据对象具有了一定的控制权限,其他事务想要操作该数据必须必须等到事务T释放该锁为止。这有点类似与在超市里面购物,一个顾客去超市购物他占用了一个寄存用的柜子中一个格子,他占据后别人不能够再使用这个格子,除非等到别人释放了这个格子。
基本的封锁类型有两种:排它锁(简称X锁,X:Exclusive)、共享锁(简称S锁,S:Share)。
一、排它锁:顾名思义,当一个事务T对某个数据对象加上X锁后就不允许其它的事务再到该数据上加任何类型的锁,直到T释放了该锁为止。此时只允许T对该数据执行各种操作。
二、共享锁:顾名思义,当一个事务T对某个数据对象加上S锁后,该事务可以对该数据执行读操作,但不允许修改。然而其它事务也可以在该数据上加S锁,即其它事务也可以读取该数据,但不允许加X锁。
以上就是锁的概念和最基本的类型,从上面我们可以了解到为什么数据库在多个用户同时并发操作的情况下数据库中的数据不会出现任何问题,原因是锁在起作用。
每个具体的数据库系统中提供的锁的类型又是不同的,比如SQLServer中提供了共享锁、更新锁、排他锁、意向锁、架构锁、大容量更新锁及键范围的锁。而锁定的数据范围可以从锁定一个行、一批(多行)、一个数据页、一个表、一个数据文件甚至到锁定整个数据库。Oracle又提供了很大程度上不同的锁。锁的知识非常复杂,各位只需要了解有这么一回事即可。爱钻研的同学可以从SQLServer联机丛书上学到相关知识。
了解了锁之后现在的问题是数据库系统在什么情况下会加什么类型的锁?加锁的时候有什么规定没有?什么时候释放锁?这些问题就是封锁协议,封锁协议中继续讨论。