事務:數據庫
事務是指做爲單個邏輯工做單元執行的一組相關操做。 安全
這些操做要求所有完成或者所有不完成。性能
使用事務的緣由:保證數據的安全有效。spa
事務的四個特色:(ACID)設計
一、原子性(Atomic):事務中全部數據的修改,要麼所有執行,要麼所有不執行。事務
二、一致性(Consistence):事務完成時,要使全部全部的數據都保持一致的狀態,換言之:經過事務進行的全部數據修改,必須在全部相關的表中獲得反映。it
三、隔離性(Isolation):事務應該在另外一個事務對數據的修改前或者修改後進行訪問。io
四、持久性(Durability):保證事務對數據庫的修改是持久有效的,即便發生系統故障,也不該該丟失。table
事務組成:select
一條或者多條DML,[一條DDL]和一條DCL。
事務的分類:
一、顯式事務:
(1)要去顯式的調用DCL。
(2)只有用到COMMIT之後纔會真正寫入數據庫,也持久化了。
二、隱式事務:
(1)若是人工要使用隱式事務,SET AUTOCOMMIT ON (只針對一個鏈接)
(2)如下狀況爲自動提交:
1)正常執行完成的DDL語句:create、alter、drop
2)正常執行完場的DCL語句GRANT、REVOKE
3)正常退出的SQLPlus或者SQL Developer等客戶端
回滾:
RollBack只能對未提交的數據撤銷,已經Commit的數據是沒法撤銷的,由於commit以後已經持久化到數據庫中。
髒讀(Dirty Read):事務T1更新了一行數據,尚未提交所作的修改,T2讀取更新後的數據,T1回滾,T2讀取的數據無效,這種數據稱爲髒讀數據。
不可重複讀(UNrepeatable Read):事務T1讀取一行數據,T2修改了T1剛剛讀取的記錄,T1再次查詢,發現與第一次讀取的記錄不相同,稱爲不可重複讀。
幻讀(Phantom Read):事務T1讀取一條帶WHERE條件的語句,返回結果集,T2插入一條新紀錄,剛好也是T1的WHERE條件,T1再次查詢,結果集中又看到T2的記錄,新紀錄就叫作幻讀。
隔離級別:
NO_TRANSACTION 不支持事務
READ_UNCOMMITED 容許髒讀、不可重複讀、幻讀
READ_COMMITED 容許不可重複讀、幻讀,不容許髒讀
REPEATABLE 容許幻讀,不容許髒讀、不可重複讀
SERIALIZABLE 髒讀、不可重複讀、幻讀都不容許
Oracle支持SQL92標準的READ_COMMITED、SERIALIZABLE,自身特有的READ_ONLY
鎖:
排它鎖:(X鎖,eXclusive LockS)
當有DML語句執行的時候,設計的行都會加上排它鎖,其餘事物不能進行讀取修改。
共享鎖:(S鎖,Shared Locks)
加了共享鎖的數據,能夠被其餘事物讀取,但不能修改。如select語句。
爲了保證性能:樂觀鎖,悲觀鎖
悲觀鎖:每次都是假設數據確定會衝突,數據開始讀取時就把數據給鎖住。
樂觀鎖:每次都是假設通常狀況下不會發生數據衝突,只有數據更新提交的時候,纔會對數據的衝突與否進行檢測,若是發生衝突,返回錯誤信息讓用戶處理。