數據庫操作事務小結

**Web開發中對數據的操作經常需要結合事物的知識,由於事務的知識點比較零散,在此做一個總結,方便以後查找。
1.什麼是事務
答:事物是指邏輯上的一組操作(insert,update,delete),組成這組操作的各個單元,要麼全部成功要麼全部失敗。
2.mysql中的事物管理
a)start transaction —- 開啓一個事務。以後的sql都在一個事務中。更改的內容不會自動提交。
rollback —事務的回滾—同時失敗的情況。–事務結束,並且全部失敗,數據回覆到開始之前的狀態
commit —–事務的提交—-同時成功—事務結束。全部成功。
3.jdbc中事務的管理
這裏寫圖片描述
一旦數據commit之後,永久更改了。不能回滾了。
4. 事務的特性 ACID
事務:一組操作。

原子性(Atomicity)
原子性是指事務是一個不可分割的工作單位(最小的一個整體),事務中的操作要麼都發生,要麼都不發生。

一組操作時一個整體。不能分割。

一致性(Consistency)
事務前後數據的完整性必須保持一致。
一致性和原子性相關。只有都成功或者,都失敗(原子性) ,就可以保證事務的一致性。

事務的前後的內容一直。
轉賬: a 1000 b 1000 a給b轉100;
轉賬之前 a和b的總額 2000
轉賬之後 也要2000;

部門,員工。 每個部門裏面都有人。
解散一個部門
刪除人。
刪出部門

如果都成功。每個部門都有人。
如果都失敗。每個部門都有人

隔離性(Isolation)
事務的隔離性是指多個用戶併發訪問數據庫時,一個用戶的事務不能被其它用戶的事務所幹擾,多個併發事務之間數據要相互隔離。

多個事務是獨立存在的。多個事物不能夠相互干擾。

a –b—事務A

c-d—事務B

如果A失敗了。不能夠影響B

持久性(Durability)
持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。
a-100
b+100
提交
此時a永遠少100
b永遠的多了100

a – 100 a 900
b+100 b 1100
commit;

a -100 a 800
b+100 b 1200
rollback : a 900 b 1100

rollback—異常。對上述沒有任何影響了。

5.事務的隔離級別
a)髒讀:是指一個事物讀取了另外一個事物未提交的數據,後果比較嚴!!
b)不可重複讀:在同一個事務中讀出來的結果,數據上面有出入
c)虛度(幻讀):在同一個事物中取出來的數據條數有出入

6.數據庫的隔離級別
Serializable:可避免髒讀、不可重複讀、虛讀情況的發生。(串行化)
Repeatable read:可避免髒讀、不可重複讀情況的發生。(可重複讀)不可以避免虛讀
Read committed:可避免髒讀情況發生(讀已提交,避免不了虛讀以及不可重複讀)
Read uncommitted:最低級別,以上情況均無法保證。(讀未提交)

設置事務的隔離級別
set session transaction isolation level 設置事務隔離級別
select @@tx_isolation 查詢當前事務隔離級別

7.隔離級別的性能問題
性能比較
Serializable 性能最差:事務一個一個執行的。排隊。

Serializable < Repeatable read < Read committed < Read uncommitted

安全性比較
Serializable 安全性最好:所有問題避免掉。

Serializable > Repeatable read > Read committed > Read uncommitted

Read uncommitted 避免不了最重問題,髒讀。
Serializable:性能太差。

mysql (默認)– Repeatable read;
oracle(默認) – Read committed;

發佈了184 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章