锁
锁定是一种将数据资源与应用程序相关联以控制其他应用程序存取同一资源的方法。
为保证实现一定程度的隔离级别,必须对数据进行锁定,数据库是通过各种锁定的组合才能实现隔离级别,来保障数据的一致性。
[@more@]三种基本的封锁类型:共享(S)锁,排它(X)锁和更新(U)锁,事实上,一个数据库管理程序往往会由于性能或管理的要求而引入其他的锁类型。同时,锁在颗粒度上由小至大分为行级锁,页级锁和表级锁,相应的,颗粒度越小,并行性就越大。
1. 共享(S)锁:用于读操作
多个事务可封锁一个共享单位的数据。
任何事务都不能修改加S锁的数据。
通常是加S锁的数据被读取完毕,S锁立即被释放。
2.排它(X)锁:用于写操作
仅允许一个事务封锁此共享数据。
其他任何事务必须等到X锁被释放才能对该数据进行访问。
X锁一直到事务结束才能被释放。
3.更新(U)锁
用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁。
当被读取数据页将要被更新时,则升级为X锁。
U锁一直到事务结束时才能被释放。
三种锁的相容性
下表简单描述了三种锁的相容性。
执行的命令 | 获得锁 | 其它进程可以查询? | 其它进程可以修改? |
Select title_id from titles | S | Yes | No |
Delete titles where price>25 | X | No | No |
Insert titles values( ...) | X | No | No |
Update titles set type='general ' where type=' business ' | U 然后X | Yes No | No No |
因为获取和释放锁定所需的CPU和内存资源随隔离级别不同而不同,所以隔离级别不但影响应用程序之间的隔离程度,而且还影响应用程序的性能,潜在的死锁情况也随隔离级别不同而不同。因此,必须在实际应用环境中寻求隔离级别和并行度的平衡,来达到最佳效果。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7437037/viewspace-912658/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7437037/viewspace-912658/