1. 程式人生 > >【Oracle學習】之 事務(Transaction)與鎖

【Oracle學習】之 事務(Transaction)與鎖

Q:建立空表後再插入記錄,再回滾,記錄沒了,而表還存在?
A:看(下文)事務提交COMMIT

Topic1 :事務
Topic2:鎖(exclusive,share鎖)

一、事務概念

  定義:事務是一些資料庫操作的集合。

特性:

  ①原子性(Atomicity):事務是資料庫的邏輯工作單位,事務中的所有操作要麼都做,要麼都不做,不存在其他情況。

這裡寫圖片描述

  ②一致性(Consistency):事務執行的結果必須是使資料庫從一個一致性狀態轉變為另一個一致性狀態,不存在中間的狀態。

這裡寫圖片描述

  ③隔離性(Isolation):資料庫中一個事務的執行不受其他事務的干擾,每個事務都感覺不到還有其他事務在併發執行。

這裡寫圖片描述

  ④永續性(Durability):一個事務一旦提交,則對資料庫中資料的改變是永久性的,以後的操作或故障不會對事務的操作結果產生任何影響。

這裡寫圖片描述

二、Oracle事務處理

(1)事務提交(COMMIT):

  ①顯式操作方式:

sql statements
...

commit | rollback

這裡寫圖片描述

  ②隱式操作方式:

(Ⅰ)利用語句可以設定事務是否自動提交

//事務的隱式管理方式
//on :開啟事務自動提交;off:取消自動提交
set autocommit on/off

這裡寫圖片描述

(Ⅱ)當發生以下事件時,事務將結束

⒈ 利用commit/rollback進行事務的提交和回滾

3. 如果使用SQL*Plus,那麼正常退出時,事務將會自動提交;而非正常退出時,則事務回滾。

(2)事務回滾(ROLLBACK):

(Ⅰ)取消全部操作

直接rollback

(Ⅱ)取消部分操作

這裡寫圖片描述

insert into test_teacher (t_id, t_name) values (4, 'Gege');
insert into test_teacher (t_id, t_name) values (5, 'LAla');
savepoint A;
update test_teacher set t_name = 'Lala' where
t_id = 5;
savepoint B; insert into test_teacher (t_id, t_name) values (6, 'Miumiu'); rollback to B; rollback to A; rollback;

這裡寫圖片描述

二、鎖

  定義:鎖是在事務訪問相同資源時,防止事務之間的有害性互動的機制,這些資源包括使用者系統物件、記憶體和資料字典中的共享資料結構。

Q:為什麼需要鎖?
A:併發執行時,容易造成讀取髒資料。
Q:併發大概分為?
A:①讀併發(不會造成錯誤,如select),②寫併發(容易造成錯誤,如insert、update、delete等等)
Q:鎖什麼時候釋放?
A:事務結束。

常見的鎖應用:

  兩個客戶端同時操作同一資料,一個進行操作,另一個進行等待。

//select 可以顯式加鎖
select * from test_teacher where t_id = 4 for update;

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

鎖的分類:

①排他鎖(exclusive):被稱為寫鎖,該模式下的鎖可以防止資源的共享,當進行資料修改時,會啟用該型別的鎖。

這裡寫圖片描述

②共享鎖(share):被稱為讀鎖,該模式下的鎖鎖定的資料只能被讀取,而不能被修改。加了共享鎖的記錄,允許被併發地讀取。

這裡寫圖片描述

  Oracle資料庫大型資料庫,它利用不同型別的鎖來管理併發會話對資料物件的操作。oracle資料庫中的鎖按照所用物件的不同分為以下幾種型別。

①DML鎖:用來保護資料的完整性,稱為資料鎖。DML鎖細分可以分為行級鎖(TX)和表級鎖(TM)。行級鎖(TX)也屬於排他鎖。

②DDL鎖:可以保護模式中物件的結構。

③內部鎖:保護資料庫的內部結構,完全自動呼叫。

死鎖:

這裡寫圖片描述