1、事務
事務是指作爲單個邏輯工作單元執行的一組相關操作。這些操作要麼全都執行,要麼全都不執行。使用事務是爲了保證數據的安全有效。
事務有一下四個特點:(ACID)
-
原子性(Atomic):一個事務是一個不可分割的工作單位,事務中包括的操作要麼都做,要麼都不做。
-
一致性(Consistence):事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
-
隔離性(Isolation):一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。
-
持久性(Durability):持久性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。
當事務之間發生併發時有幾個隔離級別:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zdWOsY9a-1584423625866)(Oracle筆記圖片/1584400605944.png)]
-
丟失更新:兩個事務同時存儲, 一個存儲 100 , 一個存儲 200,最終可能至存儲了200 或者 100,那另一個的更新就沒成功,即結果不爲預想的 300
-
髒讀:事務 T1 更新了一行數據,還沒有提交所做的修改,T2 讀取更新後的數據,T1回滾,T2 讀取的數據無效,這種數據稱爲髒讀數據。
-
不可重複讀:事務 T1 讀取一行數據,T2 修改了 T1 剛剛讀取的記錄,T1 再次查詢,發現與第一次讀取的記錄不相同,稱爲不可重複讀。
-
幻讀:事務 T1 讀取一條帶 WHERE 條件的語句,返回結果集,T2 插入一條新紀錄,恰好也是 T1 的 WHERE 條件,T1 再次查詢,結果集中又看到 T2 的記錄,新紀錄就叫做幻讀。
Oracle 默認的隔離級別是 read committed。
Oracle 支持上述四種隔離級別中的兩種:read committed 和 serializable。除此之外,
Oralce 中還定義 Read only 和 Read write 隔離級別。
Read only(只讀):事務中不能有任何修改數據庫中數據的操作語句,是 Serializable 的一個子集。
Read write(讀寫):它是默認設置,該選項表示在事務中可以有訪問語句、修改語句,但不經常使用。
1.1、事務的開啓
對數據執行增、刪、改時自動開啓事務。
1.2、關閉事務
- 操作數據庫成功
- 正常執行完成的 DDL 語句:create、alter、drop
- 正常執行完 DCL 語句 GRANT、REVOKE
- 正常退出的 SQLPlus 或者 SQL Developer 等客戶端
- 如果人工要使用隱式事務,SET AUTOCOMMIT ON (只針對一個連接)
- 手動提交 :使用 commit
- 失敗
- rollback ,手動回滾
- 非法退出 意外的斷電
注意:rollback操作只能針對未提交的數據庫操作,已提交的數據已經持久化到數據庫中了,無法撤銷。