對於一個MySQL數據庫(InnoDB),事務的開啟與提交模式無非下面這兩種情況:
1、若參數autocommit=0,事務則在用戶本次對數據進行操作時自動開啟,在用戶執行commit命令時提交,用戶本次對數據庫開始進行操作到用戶執行commit命令之間的一系列操作為一個完整的事務周期。
若不執行commit命令,系統則默認事務回滾。總而言之,當前情況下事務的狀態是需要手動去提交。
2、若參數autocommit=1(系統默認值),事務的開啟與提交又分為兩種狀態:
2.1、手動提交:autocommit=0
當用戶執行start transaction命令時(事務初始化),一個事務開啟,當用戶執行commit命令時當前事務提交。
從用戶執行start transaction命令到用戶執行commit命令之間的一系列操作為一個完整的事務周期。
若不執行commit命令,系統則默認事務回滾。
2.2、自動提交:autocommit=1
如果用戶在當前情況下(參數autocommit=1)未執行start transaction命令而對數據庫進行了操作,系統則默認用戶對數據庫的每一個操作為一個孤立的事務,
也就是說用戶每進行一次操作系都會即時提交或者即時回滾。這種情況下用戶的每一個操作都是一個完整的事務周期。
=================================
設置autocommit開啟和關閉的方法:
用戶可以將自動提交功能強制置為OFF。這樣用戶執行SQL語句后將不會被提交了,而執行COMMIT命令才提交,執行ROLLBACK命令回滾。
查看當前自動提交功能狀況:
show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.06 sec)
臨時生效設置方法:
下面是將自動提交功能置為ON以及置為OFF的具體語法。
將自動提交功能置為ON
SET AUTOCOMMIT=1;
將自動提交功能置為OFF
SET AUTOCOMMIT=0;
永久生效設置方法:
通過修改配置文件my.cnf文件,通過vim編輯my.cnf文件,在[mysqld](服務器選項下)添加:
autocommit=0