l事務的概念
•事務指邏輯上的一組操作,組成這組操作的各個單元,要不全部成功,要不全部不成功。
•例如:a——b轉帳,對應於如下兩條sql語句
update from account set money=money+100 where name=『b』;
update from account set money=money-100 where name=『a』;
l資料庫開啟事務命令
•start transaction 開啟事務
•rollback 回滾事務
•commit 提交事務
當jdbc程式向資料庫獲得乙個connection物件時,預設情況下這個connection物件會自動向資料庫提交在它上面傳送的sql語句。
若想關閉這種預設提交方式,讓多條sql在乙個事務中執行,可使用下列語句:
ljdbc控制事務語句
•connection.setautocommit(false); start transaction
•connection.rollback(); rollback
•connection.commit(); commit
事務的特性(acid)
原子性(atomicity)
原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。
一致性(consistency)
事務必須使資料庫從乙個一致性狀態變換到另外乙個一致性狀態。
隔離性(isolation)
事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干擾,多個併發事務之間要相互隔離。
永續性(durability)
永續性是指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響
事務的隔離級別
l多個執行緒開啟各自事務運算元據庫中資料時,資料庫系統要負責隔離操作,以保證各個執行緒在獲取資料時的準確性。
l如果不考慮隔離性,可能會引發如下問題:
①髒讀:
•指乙個事務讀取了另外乙個事務未提交的資料。
這是非常危險的,假設a向b轉帳100元,對應sql語句如下所示
1.update account set money=money+100 while name=『b』;
2.update account set money=money-100 while name=『a』;
當第1條sql執行完,第2條還沒執行(a未提交時),如果此時b查詢自己的帳戶,就會發現自己多了100元錢。如果a等b走後再回滾,b就會損失100元。
②不可重複讀:
•在乙個事務內讀取表中的某一行資料,多次讀取結果不同。
例如銀行想查詢a帳戶餘額,第一次查詢a帳戶為200元,此時a向帳戶記憶體了100元並提交了,銀行接著又進行了一次查詢,此時a帳戶為300元了。銀行兩次查詢不一致,可能就會很困惑,不知道哪次查詢是準的。
•和髒讀的區別是,髒讀是讀取前一事務未提交的髒資料,不可重複讀是重新讀取了前一事務已提交的資料。
•很多人認為這種情況就對了,無須困惑,當然是後面的為準。我們可以考慮這樣一種情況,比如銀行程式需要將查詢結果分別輸出到電腦螢幕和寫到檔案中,結果在乙個事務中針對輸出的目的地,進行的兩次查詢不一致,導致檔案和螢幕中的結果不一致,銀行工作人員就不知道以哪個為準了。
③虛讀(幻讀)
•是指在乙個事務內讀取到了別的事務插入的資料,導致前後讀取不一致。
•如丙存款100元未提交,這時銀行做報表統計account表中所有使用者的總額為500元,然後丙提交了,這時銀行再統計發現帳戶為600元了,造成虛讀同樣會使銀行不知所措,到底以哪個為準。
事務隔離性的設定語句
l資料庫共定義了四種隔離級別:
•serializable:可避免髒讀、不可重複讀、虛讀情況的發生。(序列化)
•repeatable read:可避免髒讀、不可重複讀情況的發生。(可重複讀)
•read committed:可避免髒讀情況發生(讀已提交)。
•read uncommitted:最低級別,以上情況均無法保證。(讀未提交)
lset transaction isolation level 設定事務隔離級別
lselect @@tx_isolation 查詢當前事務隔離級別
Mysql 事務學習筆記
當乙個人在update這個資料,另乙個人在select查詢這個資料的時候.會產生一種資料混亂,應運產生的鎖.鎖策略,就是在鎖的開銷和資料的安全性做出平衡.大部分商業資料庫並沒有提供特別多選擇,只是在表上加上行級鎖.事務是一組原子性的sql查詢,如果能執行查詢全部語句,那麼查詢全部,如果又一條語句不成...
mysql事務筆記 MySQL事務筆記
1.結束事務的方法用什麼?2.事務的最終形態是什麼?commit 提交 rollback 回滾 3.事務的四大特徵?原子性 乙個事務是最小的工作單元,事務包含的所有操作要麼全部成功,要麼全部失敗回滾 一致性 事務執行之前和執行之後都必須處於一致性狀態。拿轉賬來說,假設使用者a和使用者b兩者的錢加起來...
MySQL學習筆記(三)事務
事務就是保證一組資料庫操作,要麼全部成功,要麼全部失敗。mysql,事務支援是在引擎層實現的。資料庫多個事務同時執行,可能出現髒讀 dirty read 不可重複讀 non repeatable read 幻讀 phantom read 的問題。為了解決這些問題,就有了 隔離級別 的概念。讀未提交 ...