Mybatis的JDBC提交設置/關閉mysql自動提交------關於mysql自動提交引發的慘劇


學習Mybatis時提到了JDBC方式需要自己手動提交事務,如果不加session.commit會導致數據庫的數據無法正常插入(程序本身又不給你報錯,還裝出一副我已經插入成功的樣子)

SqlSession session = sessionFactory.openSession();

如果要自動提交的話加個參數就好啦

SqlSession session = sessionFactory.openSession(true);//自動提交

手動提交的話

SqlSession session = sessionFactory.openSession(false);//手動提交,其實就是默認的那種情況

 

后面去查了一下這個默認提交方式....發現mysql好像數據庫本身也有個默認提交方式(自動提交)

發現自動提交可能會產生某些可怕的后果(某些刪除操作寫錯就涼了),所以我決定把mysql的自動提交給關閉掉!(猶豫就會敗北!)

 

有的小伙伴可能會好奇會有什么后果,舉個例子:你要刪除一個班和一個班的所有學生的時候,你刪除一個班的時候沒問題,然后刪除學生出現了異常停止了,然而你的刪除班級指令已經提交了..然后你會發現你沒有了家(學生還在,班級沒了)~~~~~嚶嚶嚶

 

p.s. 只有innero db類型的表才可以設置autocommit;

 

方式一、

禁用步驟:

1、在執行inser / update / delete之前 先執行一個begin;語句,進行了一段時間的數據庫操作之后使用commit提交所有操作或者使用rollback回滾所有操作

p.s. 方式一要注意,一次commit或一次rollback表示最近一個begin到此次commit或rollback之間的操作都將提交或回滾,這之后的操作都必須重新設置begin,否則還會繼續使用autocommit=ON的策略

 

方式二、

1、登錄mysql數據庫

2、set autocommit='off';

3、查看是否警用: show variables like "autocommit";                                                   (如果是OFF表示禁用成功)

4、執行一段insert / update / delete語句,檢查無錯誤之后commit;這樣,這段時間內的所有操作都將提交到數據庫中,如果發現執行了不正確的insert / update / delete語句,則使用rollback,此時將會回滾到上一個commit之后數據庫的狀態




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM