Oracle锁定机制大部分情况下是自动的。你不需要关心如何锁定想要更改的对象的细节,Oracle在后台自动维护它们。
锁有两种级别:1.行级锁,2.表级锁。
锁定的优点:
一致性:一次只允许一个用户修改数据,从而提供统一的数据。
完整性:向所有用户提供正确的数据。如果一个用户进行了更改并保存,那么所做的更改将反映给所有用户。
并发性:允许多个用户访问同一数据。如一个用户在修改数据,其它用户可同时进行查询。
行级锁:是一种排他锁,防止其他事务修改此行,但是不会阻止读取此行的操作,在使用INSERT\UPDATE\DELETE和SELECT……FOR UPDATE等语句时,Oracle会自动应用行级锁。
OF子句用于指定即将更新的列,即锁定行上的特定列。
例:
select * from order_master where vencode='0002' for update of odate,del_date;
update order_master set del_date='28-8月-05' where vencode='v002'
commit;
首先锁定要更新的行,防止其他用户更改这些行,然后用update命令执行更新操作,最后通过提交命令释放锁定。
WAIT子句指定等待其他用户释放锁的秒数,防止无限期的等待。
例:
select * from order_master where vencode='v002' for update;
用另一用户登录后执行
select * from order_master where vencode='v002' for update wait 5;
由于要更新的行已经被锁定,上述命令在等待5秒钟之后返回并报错。