事務小結

1、事務定義:同生共死、同時成功或者失敗的一組操作數據的操作;

2、設置手動提交事務:set autocommit = 0;? savepoint(回滾點);? rollback(回滾); commit(提交);

3、mysql 默認是自動體積事務,也就是一句sql是一個事務;oracle默認手動提交事務,

4、原子性:每個事務是一個原子

一致性:事務中減少和增加保持整體的一致性

隔離性:當事務操作過程中,對別的事務存在隔離性

持久性:事務提交后數據被持久到數據庫,不能還原

5、數據庫不設置隔離級別容易存在的錯誤:

臟讀:讀到別的事務中未提交的數據

虛度:同一事務中先后兩次查詢的數量是不一致的

不可重復讀:同一個事務中讀到數據是不一致的(存在別的事務update的數據)

6、數據庫為了解決三中隔離性問題提供了四種隔離級別:

Serializable( 序列):事務完全隔離,不支持臟讀、虛度、不可重復讀

Repeatable Read: mysql默認支持隔離級別,支持虛度,不支持不可重復讀和臟讀

Read Commited: oracle默認支持隔離級別,支持虛度、不可重復讀,不支持臟讀

Read Uncommited : 支持臟讀、虛度、不可重復讀

7、關于丟失更新問題常見兩種解決辦法:

1):悲觀鎖:假設發生丟失的幾率很大----利用數據庫內部鎖機制

?常見數據鎖:讀鎖(共享鎖)、寫鎖(排他鎖)

* * 一條數據可以有多個讀鎖(共享鎖),但一條數據只能有一個寫鎖(寫鎖和任何鎖都互斥)

* * 數據修改會自動添加排他鎖,

* * 加鎖結合事務使用,事務中加鎖,當事務結束鎖自動釋放。

2):樂觀鎖

利用數據庫記錄版本號區分數據是否被修改,timestemp會自動更新

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容