【Oracle學習】之 事務(Transaction)與鎖
阿新 • • 發佈:2019-02-04
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;