默認情況下,MySQL 采用 autocommit 模式運行。這意味着,當執行一個用於更新(修改)表的語句之后,MySQL立刻把更新存儲到磁盤中,同時記錄鎖也會被釋放。因此如果事務要執行多條更新(修改)語句,那么從第2條更新語句開始就是在無鎖條件下執行了,這樣會導致事務失效,破壞數據一致性。
避免此問題的方法就是關閉 autocommit,然后通過執行 commit 語句來提交事務。
$dbm->begin();
$dbm->query("SET autocommit=0");
...
...
$dbm->commit();
$dbm->query("SET autocommit=0");
...
...
$dbm->commit();
注意:不能將"關閉autocommit"作為缺省設置,否則在 innodb 表上執行的查詢操作也將因為沒有執行 commit 或者 rollback 而一直鎖表!因此只能在需要時局部關閉 autocommit,並在操作完成后開啟 autocommit!