mysql中的事務
a、mysql引擎是支援事務的
b、mysql預設自動提交事務。每條語句都處在單獨的事務中。
c、手動控制事務
開啟事務:start transaction | begin
提交事務:commit
回滾事務:rollback
//我們可以手動關閉自動提交事務,然後手動提交
conn.setautocommit(false);
//提交事務
conn.commit();
//當然出現問題時,我們需要回滾事務。
conn.rollback();
事務的特性
原子性:指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。
一致性:事務必須使資料庫從乙個一致性狀態變換到另外乙個一致性狀態。轉賬前和轉賬後的總金額不變。
隔離性:事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干擾,多個併發事務之間要相互隔離。
永續性:指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。
事務的隔離級別
贓讀:指乙個事務讀取了另乙個事務未提交的資料。
不可重複讀:在乙個事務內讀取表中的某一行資料,多次讀取結果不同。乙個事務讀取到了另乙個事務提交後的資料。(update)
虛讀(幻讀):是指在乙個事務內讀取到了別的事務插入的資料,導致前後讀取不一致。 (insert)
資料庫通過設定事務的隔離級別防止以上情況的發生:
* 1、read uncommitted: 贓讀、不可重複讀、虛讀都有可能發生。
* 2、read committed: 避免贓讀。不可重複讀、虛讀都有可能發生。(oracle預設的)
* 4、repeatable read:避免贓讀、不可重複讀。虛讀有可能發生。(mysql預設)
* 8、serializable: 避免贓讀、不可重複讀、虛讀。
級別越高,效能越低,資料越安全
檢視當前的事務隔離級別:select @@tx_isolation;
更改當前的事務隔離級別:set
transaction
isolation
level 四個級別之一。
設定隔離級別必須在事務之前
當然我們也可以手動設定事務的隔離級別
connection.settransactionisolation(int level);
1:乙個事務可以讀取另乙個事務未提交的資料
2:只能讀取另乙個事務提交後的資料
4:可以讀取另乙個事務一直在修改的資料,只是有可能發生,有時也不發生。
8:可以解決這些問題,但是只允許乙個人運算元據庫,效率太低,一般不用。
MySQL事務及事務隔離級別
原子性 atomicity 事務是乙個原子操作單元,其對資料的修改,要麼全都執行,要麼全都不執行。一致性 consistent 在事務開始和完成時,資料都必須保持一致狀態。這意味著所有相關的資料規則都必須應用於事務的修改,以保持資料的完整性 事務結束時,所有的內部資料結構 如b樹索引或雙向鍊錶 也都...
mysql 事務及隔離級別
原子性 回滾日誌 undo log 永續性 重做日誌 redo log 隔離性 鎖 一致性 通過aid及使用者自定義完整性保證 一致性是事務追求的最終目標 前面提到的原子性 永續性和隔離性,都是為了保證資料庫狀態的一致性。此外,除了資料庫層面的保障,一致性的實現也需要應用層面進行保障。一致性是指事務...
mysql 事務及隔離級別
事務 transaction 是由一系列對資料庫中的資料進行操作訪問所組成的乙個程式執行單元 在同乙個事務中所進行的操作,要麼都成功,要麼就什麼都不做。理想中的事務必須滿足四大特性,這就是大名鼎鼎的acid。a atomicity 原子性 是指乙個事務要麼全部執行,要麼不執行,也就是說乙個事務不可能...