今天我們要簡單介紹一下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.不必要且更高等級的鎖定
--
累斃了,編寫邊打瞌睡