Advertisement

oracle的乐观/悲观锁

阅读量:

一、问题引出

假设当当网上用户下单购买了一本书后,在系统中存在一条记录编号为001的订单记录;其中包含一个名为status的字段标记为'有效'的状态标识符;这表示该订单记录处于有效状态;

2. 后台管理人员查询到这条001的订单,并且看到状态是有效的;

用户意识到下单时输入错误后取消订单请求,并假设执行以下更新语句:update order_table set status = '取消' where order_id = 001;

后台管理人员在第②步查看到订单状态为有效时,在此情况下尽管用户已在第③步撤销了订单信息但后台系统未及时刷新页面导致原有订单状态仍被显示为有效随后管理人员选择了‘发货’功能将该订单提交至物流部门并执行如下的数据库更新操作:即通过以下SQL命令将该单据的状态更新为已发货:update order_table set status = ‘已发货’ where order_id = 001;

<<< 上面的问题应该如何解决呢??? 请见下文分解 >>>

二、悲观锁

即为悲观锁。这是一种较为保守的态度,在实际操作中表现为每当试图获取数据时都会假设他人会修改。因此每次都必须锁定数据以防止被修改。

在Oracle数据库中,默认情况下开启 pessimistic lock机制时必须使用现有的连接。它可以划分为两种类型:其中一种采用 se

全部评论 (0)

还没有任何评论哟~