12.2 什么是锁

数据库是一个庞大的多用户数据管理系统,由于在多用户的系统中,同一时刻多个用户同时操作某相同资源的情况时有发生,而在逻辑上这些用户想同时操作该资源是不可能的,而数据库中利用锁消除了多用户操作同一资源时可能产生的隐患。本节将介绍锁的概念、作用以及分类等与锁相关的知识。

12.2.1 认识锁

锁出现在数据共享的环境中,它是一种机制,在访问相同资源时,可以防止事务之间的破坏性交互。例如,在多个会话同时操作某表时,优先操作的会话需要对其锁定。

事务的分离性要求当前事务不能影响其他的事务,所以当多个会话访问相同的资源时,数据库系统会利用锁确保它们像队列一样依次进行。Oracle处理数据时用到的锁是自动获取的,我们不用对此有过多的关注,但Oracle允许我们手动锁定数据。

Oracle利用很低的约束提供了最大程度的并发性,例如某会话正在修改一条记录,那么仅仅该记录会被锁定。而其他会话可以随时做读取操作,但读取的依然是修改前的数据。

Oracle的锁保证了数据的完整性。例如,当一个会话对表A的某行记录进行修改时,另一个会话也来修改该行记录,在没有任何处理的情况下保留的数据会有随机性,而这种数据是没有任何意义的,为脏数据。如果此时使用了行级锁,第一个会话修改记录时封锁该行,那么第二个会话此时只能等待,这样就避免了脏数据的产生。