Oracle中的鎖定可以分為幾類:DML lock(data lock),DDL lock(dictionary lock)和internal lock/latch。
DML lock又可以分為row lock和table lock。row lock在select.. for update/insert/update/delete時隱式自動產生,而table lock除了隱式產生,也可以調用lock table in name來顯示鎖定。
DML lock又可以分為row lock和table lock。row lock在select.. for update/insert/update/delete時隱式自動產生,而table lock除了隱式產生,也可以調用lock table
如果不希望別的session lock/insert/update/delete表中任意一行,只允許查詢,可以用lock table table_name in exclusive mode。(X)這個鎖定模式級別最高,并發度最小。
如果允許別的session查詢或用select for update鎖定記錄,不允許insert/update/delete,可以用lock table table_name in share row exclusive mode。(SRX)
如
果允許別的session查詢或select for update以及lock table table_name in share
mode,只是不允許insert/update/delete,可以用lock table table_name in share
mode。(share mode和share row exclusive mode的區別在于一個是非搶占式的而另一個是搶占式的。進入share
row exclusive mode后其他session不能阻止你insert/update/delete,而進入share
mode后其他session也同樣可以進入share mode,進而阻止你對表的修改。(S)
還有兩種鎖定模式,row share(RS)和row exclusive(RX)。他們允許的并發操作更多,一般直接用DML語句自動獲得,而不用lock語句。