2011-03-10 128 views
2

嗨我想看看什麼是鎖定數據庫,並找到2種類型的鎖定。樂觀和悲觀的鎖定。我在Wiki上發現了一些文章,但我想知道更多!有人可以解釋我關於這些鎖定嗎?當我們需要獨佔訪問某些東西時,我們應該只使用鎖定功能鎖定只發生在我們使用交易時? 在此先感謝。鎖定數據庫

Kevin

回答

4

樂觀鎖定根本沒有鎖定。

它通過在開始進行更改之前記下系統所處的狀態,然後繼續前進並僅做出這些更改,假設(樂觀地)沒有其他人會想要發生衝突的更新。就像你要自動提交這些更改一樣,你會檢查是否有人同時也更新了相同的數據。在這種情況下,您的提交失敗。

顛覆例如使用樂觀鎖。當你嘗試提交時,你必須處理任何衝突,但在此之前,你可以在你的工作副本上做任何你想要的。

悲觀鎖與真正的鎖的工作。假設存在爭用,則在觸摸之前鎖定要更新的所有內容。其他人將不得不等待您提交或回滾。

當使用帶有事務支持關係型數據庫,該數據庫通常需要在內部鎖定的照顧,所以對正常的聯機處理,你不需要處理這個自己(比如當你發出一個UPDATE語句)。只有當你想做維護工作或大批量時,你有時想鎖定桌子。

,當我們需要的東西獨佔訪問我們應該只使用鎖定?

你需要它,以防止其他會話衝突操作。一般來說,這意味着更新。讀取數據通常可以同時進行。當我們用交易

鎖定只發生?

是的。繼續進行交易時,您將累積鎖定,並在結束時釋放所有鎖定。請注意,自動提交模式下的單個SQL命令本身仍然是一個事務。

+0

所以你的意思是樂觀鎖會自動發生當我們插入,UPD吃和刪除?有了交易,悲觀鎖定會發生嗎?我對麼 ? – kevin 2011-03-10 05:51:12

+0

不,您的常規RDBMS(如Oracle或SQL Server)會執行悲觀鎖定。當你更新行將被鎖定。除非您承諾,否則其他人無法觸碰它。 – Thilo 2011-03-10 06:30:17

+0

對不起,我很困惑。你能再詳細一點嗎?你是指當我使用事務或更新,刪除或插入時發生悲觀鎖定?你說__樂觀鎖定是完全不鎖定的,爲什麼它不鎖定?對不起我的無知!謝謝你的時間! – kevin 2011-03-10 07:07:26

0

事務隔離級別還指定鎖定行爲。 BOL指的是:事務隔離級別控制:

是否在讀取數據時執行鎖定以及請求何種類型的鎖。

讀鎖持續了多長時間。

無論是讀操作引用其他事務修改的行:

塊,直到該行的排它鎖被釋放。

檢索語句或事務開始時存在的行的提交版本。

讀取未提交的數據修改。

默認級別爲: 未提交的讀(最低水平,交易是孤立只不足以確保物理損壞的數據不被讀取)

讀取已提交(數據庫引擎默認級別)

重複讀

Serializable接口(最高水平,其中,所有交易都是完全相互隔離)