事務具備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 ;
查看系統變量 ( 參數)