Oracle數據庫:事務問題

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操作只能針對未提交的數據庫操作,已提交的數據已經持久化到數據庫中了,無法撤銷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章