MySQL事務autocommit自動提交

MySQL默認操做模式就是autocommit自動提交模式。這就表示除非顯式地開始一個事務,不然每一個查詢都被當作一個單獨的事務自動執行。咱們能夠經過設置autocommit的值改變是不是自動提交autocommit模式。mysql

經過如下命令能夠查看當前autocommit模式sql

mysql> show variables like 'autocommit';數據庫

+---------------+-------+事務

| Variable_name | Value |資源

+---------------+-------+it

| autocommit    | ON    |數據

+---------------+-------+查詢

1 row in set (0.04 sec)co

從查詢結果中,咱們發現Value的值是ON,表示autocommit開啓。咱們能夠經過如下SQL語句改變這個模式存儲引擎

1

mysql> set autocommit = 0;

值0和OFF都是同樣的,固然,1也就表示ON。經過以上設置autocommit=0,則用戶將一直處於某個事務中,直到執行一條commit提交或rollback語句纔會結束當前事務從新開始一個新的事務。

舉個例子:

張三給李四轉帳500元。那麼在數據庫中應該是如下操做:

1,先查詢張三的帳戶餘額是否足夠

2,張三的帳戶上減去500元

3,李四的帳戶上加上500元

以上三個步驟就能夠放在一個事務中執行提交,要麼所有執行要麼所有不執行,若是一切都OK就commit提交永久性更改數據;若是出錯則rollback回滾到更改前的狀態。利用事務處理就不會出現張三的錢少了李四的帳戶卻沒有增長500元或者張三的錢沒有減去李四的帳戶卻加了500元。

MySQL默認的存儲引擎是MyISAM,MyISAM存儲引擎不支持事務處理,因此改變autocommit沒有什麼做用。但不會報錯,因此要使用事務處理的童鞋必定要肯定你所操做的表示支持事務處理的,如InnoDB。若是不知道表的存儲引擎能夠經過查看建表語句查看建表的時候有沒有指定事務類型的存儲引擎,若是沒有指定存儲引擎默認則是MyISAM不支持事務的存儲引擎。

固然,事務處理是爲了保障表數據原子性、一致性、隔離性、持久性。這些都是要消耗系統資源的,要謹慎選擇。

相關文章
相關標籤/搜索