使用mysql資料庫的小夥伴們,對mysql怎麼控制事物,語句的提交一定要了解清楚,如果應用代碼對事物使用不當,就會造成Mysql事物部分update語句成功,部分失敗。下面就詳細解釋其產生的原因
首先說一個mysql的事務提交的參數
這個參數很好理解,如果autocommit設置為1,就是開啟mysql資料庫自動提交的特性,設置為0,則不開啟自動提交。這裡需要提醒大家的是,設置為1之後,資料庫自動提交的意思,每當應用請求一個update,或者insert,或者delete語句時,Mysql就會提交這個語句。請注意,如果應用邏輯要實現的是一個事物包含3條update語句,大家都會認為,3個Update語句如果有一個執行失敗,則全部回滾,但是請注意,應用如果沒有在代碼中顯示的去啟用事物,mysql資料庫執行情況是這樣的
資料庫成功執行了1和2兩個update,第三個sql語句因為鎖等或者連接斷開,並沒有執行,最後的結果是什麼呢,就是語句1和語句2被資料庫正常提交,並落盤了。我換一個寫法,大家就明白了
因為事物沒有控制,就導致部分update語句成功,部分失敗。