記錄鎖定
Oracle隱式地實現(xiàn)記錄鎖定。當(dāng)執(zhí)行INSERT、DELETE、SELECT FOR UPDATE時,將進行記錄鎖定。這種鎖定又稱為互斥鎖,或者也稱為排他鎖(Exclusive Locks)。當(dāng)記錄添加了這種鎖之后,鎖定總是以獨占的方式進行,一個事務(wù)沒有結(jié)束以前,其他的事務(wù)只有等待知道鎖定釋放。
表鎖定
Oracle默認并不會進行表鎖定。
下面是最常見的幾種表的鎖定的模式:
- ROW SHARE:行共享鎖,這是一種最小限制的鎖定,在鎖定表的同時允許別的事務(wù)并發(fā)地對表進行SELECT、INSERT、UPDATE、DELETE及LOCK TABLE操作,它不允許任何事務(wù)對同一個表進行獨占式的寫訪問。
- ROW EXCLUSIVE:行排他鎖,當(dāng)一個表的多條記錄被更新時,也允許別的事務(wù)對同一個表執(zhí)行SELECT、INSERT、UPDATE、DELETE及LOCK TABLE操作,但是與行共享鎖不同的是它不能防止別的事務(wù)對同一個表的手工鎖定或獨占式的讀和寫。
- SHARE LOCK:共享鎖,只允許別的事務(wù)查詢或鎖定特定的記錄,防止任何事務(wù)對同一個表的插入修改和刪除操作。
- SHARE ROW EXCLUSIVE:共享排他鎖,用于查看整個表,也允許別的事務(wù)查看表中的記錄,但不允許別的事務(wù)以共享模式鎖定表或更新表中的記錄,這種鎖定一般只允許用于SELECT FOR UPDATE語句中。
- EXCLUSIVE:排他鎖,該事務(wù)以獨占方式寫一個表,允許別的用戶讀取和查詢,但是不允許進行任何的插入修改和刪除。
如果沒有顯式地指定鎖定,Oracle在運行時會自動地提供隱式的鎖定,因此一般情況下不需要對鎖進行精細的控制,只有在有特殊需要時,才可能需要手工控制鎖定的級別。
使用LOCK TABLE
LOCK TABLE可以使用一個特定的鎖定模式鎖定整個數(shù)據(jù)表。
語法為:
LOCK TABLE tale_reference_list IN lock_mode MODE [NOWAIT];
使用如下:
LOCK TABLE emp IN SHARE MODE;
LOCK TABLE emp IN EXCLUSIVE MODE NOWAIT;
LOCK TABLE emp IN SHARE UPDATE MODE;
LOCK TABLE emp IN ROW EXCLUSIVE MODE NOWAIT;
LOCK TABLE emp IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE emp IN ROW SHARE MODE NOWATI;
如果要接觸使用LOCK TABLE的鎖定,只需要簡單的使用COMMIT或ROLLBACK即可。
LOCK TABLE還可以對視圖鎖定,鎖定視圖實際上就是對視圖所組成的基礎(chǔ)表進行了鎖定。比如view_emp_dept 視圖由emp表和dept表組成,那么鎖定視圖實際上是對emp和dept這兩個表的鎖定。
例如下面的語句:
LOCK TABLE view_emp_dept IN SHARE MODE NOWAIT;
實際上等價于:
LOCK TABLE emp,dept IN SHARE MODE NOWAIT;
|