事務和Oracle鎖的概念

2021-09-23 06:10:58 字數 1148 閱讀 8718

多使用者下的死鎖

事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料的訪問, 事務的正確執行使得資料庫從一種狀態轉換成另一種狀態(簡單理解為對資料的一次操作過程就是乙個事務)。

對資料庫的一次操作就是乙個事務,在乙個事務中可能要執行多條sql語句。

在進行資料操作的過程中可能會在一次功能實現中執行多個更新語句(增加、修改、刪除)。比如轉賬過程:

a轉賬1000w給b

1.在a賬戶上較少了1000w(要執行乙個減少a賬戶存款的sql語句)。

2.在b賬戶上增加1000w(手續費不算,要執行乙個增加b賬戶的sql語句)。

在以上的過程中會出現這樣的情況,在減少a賬戶的存款之後,此時系統出現了乙個未知的錯誤,導致了b賬戶上的金額沒有增加。

此時有一種解決方案:只有所有的sql語句都成功執行之後才進行事務的提交(資料庫中使用的命令是commit),若在執行的過程中只要有一條sql語句出現了錯誤或者異常則讓事務回滾(撤銷已經執行成功的sql語句,資料庫中事務回滾的命令是rollback)。

在多個使用者同時操作一條資料的時候,如果前面乙個使用者更新了資料,但是沒有提交事務(更新資料之後沒有執行commit命令提交事務)。則後面乙個使用者不能操作當前資料,只有等待上乙個使用者提交或者回滾事務之後才能進行操作。

在資料庫中如果某個使用者正在更新一條資料的時候會取得一把鎖,這個鎖是當前使用者占用,當前使用者操作該資料的過程中其他使用者不能操作該資料,在操作完成之後會釋放鎖(為該條資料釋放鎖),釋放鎖之後其他使用者才能進行操作,這是一種悲觀鎖(認為資料一定會出現問題,所以就要鎖定),也是獨佔鎖(與共享鎖是相對的)。

資料操作完畢的兩種情況:提交事務、事務回滾。

如果想要查詢語句也能出現死鎖的現象,可以在查詢語句之後增加乙個關鍵字for update

其實上資料庫提供的提供的鎖機制是一種悲觀鎖,此處有樂觀鎖,樂觀鎖是通過控制版本號或者時間戳來實現的一種機制,要結合程式才能實現。

悲觀鎖與樂觀鎖的區別在於悲觀鎖認為資料更新時一定會發生衝突,因此需要對紀錄枷鎖,具有較好的效能,通常針對併發使用。

樂觀鎖與其不同,它認為不存在衝突,因此,需要在提交時保證資料一致性,如果不一致,則返回錯誤,由程式本身的邏輯進行處理(通過在表中增加版本戳列,來表示是否發生了變化)。

oracle事務的隔離級別和鎖

1.事務的特性 acid 1 原子性 atomicity 事務所包含的資料庫操作要麼都做,要麼都不做 2 一致性 consistency 事務前後,所有的資料都保持一致的狀態 例如 事務之前a,b兩個賬戶的總和是10萬 a 4w,b 6w 現在a轉賬2w給b a 2w,b 8w a,b賬戶總和依舊是...

Oracle 事務隔離級別和鎖

1.事務的特性 acid 1 原子性 atomicity 事務所包含的資料庫操作要麼都做,要麼都不做 2 一致性 consistency 事務前後,所有的資料都保持一致的狀態 例如 事務之前a,b兩個賬戶的總和是10萬 a 4w,b 6w 現在a轉賬2w給b a 2w,b 8w a,b賬戶總和依舊是...

oracle事務與鎖

一.事務有4個特性,它們分別是原子性,一致性,分離性,永續性.1 原子性 事務的原子性是指,事務中程式是資料庫的邏輯工作單位,它對資料的修改要麼全部執行,要麼完全不執行.原子也意味著不可分割,不管有多少程式,只要在同乙個事務中,那麼它們就是乙個整體,如果都執行成功才意味著該事務成功,而有乙個操作失敗...