python 版本的mysql connector 的commit

做了一個測試:

在python中利用mysql connector 連接數據庫insert 

測試表明在execute後,insert 的數據已經進入了mysql,但是如果最後沒有commit 的話已經進入數據庫的數據會被清除掉,自動回滾

這點是可以通過數據庫中的自增id來看出來的。

但是這種commit方案導致了自增id的非連續性,在某些時候是真心的有問題

原本id是4,多次insert 然後沒有commit,再insert 後commit 的話,這個ID就不是5了,遠遠大於5!

出現這一問題的根源到底是connector還是mysql本身呢?

python 下的另外一個數據庫連接類mysqldb會不會存在同樣的情形!


ps,做了一下補充測試。commit 只是對於innodb生效,而對於myisam 來說,只要execute就一定生效了,這就需要綜合考慮在做數據連接層設計的時候是否需要把trans的控制獨立出來可控,然後在編碼層面可以更靈活的控制數據庫的操作(多次Exce,最後才commit)!

這個問題之前是沒有注意過的


補充之二,之前在php操作mysql的時候,沒有太注意這個問題,雖然有利用到trans,但是應該不是所有的地方都開啓了trans,是我的php版本的mysql操作自動做了某些操作還是?當然connector 的說明說得很清楚,autocommit被關閉了!從事務角度和數據庫性能操作的角度來講autocommit 確實應該被關閉!那就是說有可能我之前的php版本的mysql操作層在某個地方開啓了autocommit,還是說作爲一個配置在innodb上被打開了?


無限補充三: 在execute 一些select 後,如果不調用fetcchxxx 之類的語法,就去執行insert 或者update 或者其他語句,有的時候會出錯:Unread result found.(存在未讀取的數據集)。不論是不是真的有數據(忍不住吐糟一下:度娘查不出"unread result found"資料啊! 度娘你不懂英文啊!)

發佈了280 篇原創文章 · 獲贊 3 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章