我猜想:ROW SHARE是(级别=2)对表加表定义共享锁,SHARE(级别=4)是对表定义及表“所有”的记录加共享锁。但这样就有问题:1、SELECT FOR UPDATE产生TM=2、对查询出来的记录产生TX=6的锁,那这样应该与:表“所有”的记录加共享锁 相冲突了?但实际并不是,实际上,当对表加SHARE锁时,还是可以对该表执行 SELECT FOR UPDATE,但却不可以执行DML操作!
现我只能这样理解,虽然产生了TX=6 的事务锁,但实际上,还并没有真正修改记录。和真正的INSERT ,UPDATE, DELETE 操作还是有区别的。也就是:SELECT FOR UPDATE这个锁有点非凡:对加了共享锁的记录,还可以SELECT FOR UPDATE,但若想执行DML语句,则不可以,因为该表的“所有” 记录都加了共享锁。
其中 SELECT FOR UPDATE是比较非凡的一种情况:由于其不修改记录,所以对这些记录而言,并未产生真正的排它锁,这与DML操作产生的排它锁相比,是有差别的,但由于不答应在这些记录“再”加SELECT FOR UPDATE,所以,也不是纯粹的共享锁,我认为其是介于共享锁和排它锁之间的一种非凡的情况,因此,ORACLE在对表加了S锁后,还答应对该表执行SELCT FOR UPDATE,但实际上,此时此语句已经无意义了,因为加了S锁的表不答应DML操作,故,此语句于普通的SELECT 语句无差别。