MySQL預設操作模式就是autocommit自動提交模式。這就表示除非明確地開始一個事務,否則每個查詢都被當作一個單獨的事務自動執行。我們可以透過設定autocommit的值來改變是否是自動提交autocommit模式。
透過以下指令可以查看目前autocommit模式
mysql> show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ 1 row in set (0.04 sec)
從查詢結果中,我們發現Value的值是ON,表示autocommit開啟。我們可以透過以下SQL語句改變這個模式
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不支援交易的儲存引擎。
當然,事務處理是為了保障表資料原子性、一致性、隔離性、持久性。這些都是要消耗系統資源的,要謹慎選擇。
以上就是MySQL事務autocommit自動提交的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!