乐观锁定基本上是“只有在修改数据时才会锁定数据,不在读取数据时进行锁定”。需要注意的是,如果您不立即锁定数据,则其他人可能会在您之前更改它,并且您将看到旧新闻(并且可能会盲目地覆盖在读取数据并更新数据之间发生的更改)。
悲观锁定是在读取数据时锁定数据,以确保如果您决定更新数据,则没有人更改过它。
这是一个应用程序决策,而不是Oracle决策,因为:
SELECT x,y,z FROM table1 WHERE a = 2
不会锁定匹配记录,但是
SELECT x,y,z FROM table1 WHERE a = 2 FOR UPDATE
会。因此,您必须决定是否愿意采用乐观锁定。
SELECT x, y, z FROM table1 WHERE a = 2
...时间流逝...
UPDATE table1
SET x = 1, y = 2, z = 3
WHERE a = 2
你可能会覆盖其他人在此期间所做的更改。
或者需要持悲观态度:
SELECT x, y, z FROM table1 WHERE a = 2 FOR UPDATE
……时间流逝……
UPDATE table1
SET x = 1, y = 2, z = 3
WHERE a = 2
您确认自查询数据以来,没有任何人更改了数据。
在此查看Oracle中可用的隔离级别。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#CNCPT621