我猜想: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 語句無差別。