Mariadb 事務

事務

事務具備ACID特性:原子性(A,atomicity)、一致性(C,consistency)、隔離性(I,isolation)、持久性(D,durabulity)。數據庫

一、原子性:事務內的全部操做要麼都執行,要麼都不執行,它是一個不可分割的工做單位。vim

二、一致性:數據庫老是從一個一致性的狀態轉換到另外一個一致性的狀態(在前面的例子當中,一致性確保了,即便在執行第3、四條語句之間系統崩潰,支票帳戶也不會損失200美圓,由於事物最終沒有被提交,因此事物中所作的修改也不會保存到數據庫中)atom

三、隔離性:一個事務所作的修改在最終提交以前,對其餘事務是不可見的(在前面的例子中,當執行完第三條語句、第四條語句還未開始時,此時有另一個帳戶彙總程序開始運行,則其看到的支票帳戶的餘額並無被減去200美圓。)spa

四、持久性:事務完成後,該事務內涉及的數據必須持久性的寫入磁盤保證其持久性。固然,這是從事務的角度來考慮的的持久性,從操做系統故障或硬件故障來講,這是不必定的。操作系統

驗證隔離性;( 開啓事務,模擬轉帳的環境)code

1>建立一個表並加入數據server

 

2>查看事務變量     (  show variables   能夠用來查看系統變量)blog

 

on : 自動提交事務事務

3>開啓事務 ( 兩種方式 begin;         start   transaction;)   開啓事務不會自動提交,操做處於內存當中內存

 

4>模擬轉帳

 

$

 

5>再看一個終端查看

 

&開啓事務並模擬轉帳

 

會發現一直卡着,直到報錯

這是由於 事務的隔離性, 相互是不可干擾

6> 關閉事務 ( 寫到了 磁盤上)

 

7>查看

 

#查看 另外一個終端

 

爲何沒變? 由於此時還處於事務當中,須要結束事務

 

&模擬轉帳斷電

1>開啓事務

2>轉帳

 

3> 模擬斷電

 

4>再次進入數據庫

 

5>查看

 

會發現轉出去的又回來了, 這是由於,從begin 開始這已是一個事務, 要麼就所有執行成功,要麼有一個失敗全失敗。

失敗後於作了一次回滾 ( rollback)( 至關於我們什麼都沒操做)

6>這時候則須要人爲 來調整下

 

注: 結束事務有兩種方法,commit ;   rollback;(回滾)

補充:

&1

這裏默認 ON       在不開啓  begin 的狀況下 每執行一條seq 語句都會自動提交事務

改變它的默認參數

&1永久方法

編輯配置文件 

vim  /etc/my.cnf.d/server.cnf

 

0  : 關閉

重啓數據庫並查看

 

&2臨時修改

set  xxxx = 0

補充2: show variables ;

查看系統變量 ( 參數)

相關文章
相關標籤/搜索