工作兩年了,這是第一次在csdn開始寫部落格,記錄一下自己。
資料庫事務(transaction)是訪問並可能操作各種資料項的乙個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是乙個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部資料庫操作組成。
事務擁有四大特性,分別為原子性、一致性、隔離性、永續性:
1、原子性(atomicity):事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。
栗子:就拿最經典的轉賬來舉例子,a賬戶給b賬戶轉賬200元,那麼就是a賬戶-200元,b賬戶+200元。如果這兩條sql都執行成功,那麼轉賬操作就會成功,如果有一條sql操作失敗,那麼轉賬操作就都失敗了。
// 開啟事務,這是推薦的操作
start transaction
update 賬戶表 set 金額 = 金額 -
100 where name =
'a';
update 賬戶表 set 金額 = 金額 +
100 where name =
'b';
if error then
rollback
else
commit
2、一致性(consistency):幾個並行執行的事務,其執行結果必須與按某一順序 序列執行的結果相一致。通俗的來講就是資料執行前後資料需要保持一致。
栗子:還是用轉賬案例來講。賬戶a有1000元,賬戶b有1000元。賬戶a給賬戶b轉賬200元。sql執行完畢之後,那麼賬戶a和賬戶b最後的總金額是2000元保持不變。
3、隔離性(isolation):事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的。通俗的來講就是,多個事務併發執行的時候,乙個事務不影響另乙個事務的操作。比如要檢視資料更新的狀態,那麼事務a將檢視的資料是事務b更新之前或更新之後的資料,不會看到該資料中間的狀態。
栗子:賬戶a有1000元,賬戶b有1000元,賬戶c有1000元。在同一事務中,賬戶a給賬戶b轉賬200元,賬戶c給賬戶b轉賬100元。那麼事務a去查詢賬戶b的餘額,只會看到賬戶b的餘額為轉賬之前的1300元或者是轉賬之前的1000元,不會看到其他的結果。
4、永續性(durability):對於任意已提交事務,系統必須保證該事務對資料庫的改變不被丟失,即使資料庫出現故障。
1、髒讀:事務a讀取了事務b中沒有提交的資料。
栗子:哈哈,還是轉賬的栗子。賬戶a中有1000元,開始事務a,賬戶a取走200元,沒有提交,這時候切換到事務b中,事務b檢視賬戶a餘額,此時檢視到賬戶a中的餘額還是1000元,因為事務a沒有提交,所以產生了髒讀。
2、不可重複讀:在乙個事務裡面讀取了兩次某個資料,讀出來的資料不一致。
栗子:還是這個栗子。事務a開啟事務,檢視賬戶a中的餘額為1000元,此時切換到事務b中,事務b開啟事務,對取走賬戶a中的200元,提交。此時切換到事務a中,檢視到賬戶a餘額為800元,事務a兩次讀取到的資料不一致。這就是不可重複讀。
3、幻讀:在乙個事務裡面的操作中發現了未被操作的資料。
栗子:現在咱們換個栗子,事務a開啟事務對a班的學生繳納學費情況列表都改為已繳納然後提交,切換到事務b中,給a班的學生列表中增加乙個新入學的新生,這個學生當然是沒有繳納學費的了,然後提交,此時在切換回事務a中,檢視學生繳納學費資訊情況,發現有乙個學生沒有繳納,這就是幻讀,就跟產生了幻覺一樣。
資料庫的隔離級別有4個,由高到低分別是:
讀未提交(read uncommitted)、讀已提交(read committed)、可重複讀(repeatable read)、序列化(serializable)。這四個隔離級別可以解決髒讀,不可重複讀和幻讀等問題。
隔離級別
是否出現髒讀
是否出現不可重複讀
是否出現 幻讀
read uncommitted√√
√read committed(oracle,sqlserver預設隔離級別)×√
√repeatable read(mysql預設隔離級別)××
√serializable××
×隔離級別和併發效能的關係:
事務的隔離級別越高,他們的併發效能越差
mysql檢視當前隔離級別
select @@tx_isolation
;
mysql設定隔離級別
set
session
transaction
isolation
level 隔離級別
Linux初步認識(一)
linux一般用來做伺服器端的作業系統。命令描述 pwd print work directory 顯示工作路徑 ls list 列出當前工作路徑下的所有檔案或者資料夾 ls l 或者ll 顯示檔案和目錄的詳細資料 ls a 顯示隱藏的檔案 ls txt 顯示所有以.txt的檔案 佔多位 ls tx...
MySQL事務(一)認識事務
簡單來說,事務就是要保證一組資料庫操作,要麼全部完成,要麼全部失敗。資料庫中的資料是共享資源,因此資料庫系統通常要支援多個使用者的或不同應用程式的訪問,會出現併發訪問資料的現象。資料庫系統必須對這種併發操作提供一種相應的處理機制來保證,訪問彼此之間不受任何干擾,從而保證資料庫的正確性不受到破壞,這種...
網路程式設計初步認識(一)
1 socket是連線應用程式與網路驅動程式的橋梁,socket在應用程式中建立,通過繫結操作與驅動程式建立關係。應用程式送給socket的資料,由socket交給驅動程式,驅動程式向網路傳送出去。計算機從網路上收到與該socket繫結的ip位址和埠號相關的資料後,由驅動程式交給socket,應用程...