今天我們要簡單介紹一下oralce 中的lock。


locks可以避免多個session在同時修改同一個資料,可能發生的資料問題。

比方說第一個transation1在update的時候,transation2就不能同時修改相同的資料,直到第一個transation結束後釋放被鎖定的資料。

lock可以鎖定個別列的資料、多列資料,甚至是整個資料表。

oracle 10g支援手動與自動lock,自動lock會鎖定有可能發生衝突,且範圍最小的資料層集。

鎖定的指令有insert, updates,deletes, 鎖定檔案的時間直到transaction結束為止(with commit, rollback)


手動鎖定的語法:
LOCK TABLE employee IN EXCLUSIVE MODE


(EXCLISIVE是最嚴格的鎖定模式,他會鎖定其他Transaction不能存取這個Table,直到鎖定請求結束為止。)



除此之外,下列還有其他鎖定模式:

ROW SHARE:

允許限型存取連線所定資料表,但禁止用於已經被EXCLISIVE鎖定的資料表

ROW EXCLUSIVE:
與ROW SHARE相同,但也禁止用於已經被ROW SHARE鎖定。

ROW EXCLUSIVE會自動執行當updata,insert或者delete資料的時候。

SHARE:
用於產生鎖飲的時候。

允許查詢但禁止更新被鎖定的資料表。

SHARE ROW EXCLUSIVE:
用於查詢整個資料表並允許查詢資料列,但禁止用於已經被SHARE模式鎖定的資料表

EXCLUSIVE:
允許查詢被鎖定的資料表,但禁止其他作用於此資料表的功能。通常用於刪掉資料表。

通常發生鎖定的情況有三種:

1.長時間運作的transaction

2.尚未commit的資料

3.不必要且更高等級的鎖定

--

累斃了,編寫邊打瞌睡