學習Mysql事務筆記

2022-08-11 07:00:12 字數 2133 閱讀 1586

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 的問題。為了解決這些問題,就有了 隔離級別 的概念。讀未提交 ...