工作幾年了基本沒用過mysql,悲催哈。。。今天在搞個小東西的時候用到mysql。一個很簡單的問題,搞了幾個小時,看來無知還是比較可怕的。。
進入正題吧。
問題很簡單 JDBC 連接mysl 獲取connnection 然後conn.setAutoCommit(false);
重點來了 現在是要插入一條記錄
inset1......然後做一些邏輯處理,更新另一條數據 update2.。。
最後conn.commit();當然catche裡面還有 conn.rollback()。
DEBUG時候發現 insert1執行完,數據庫已經有值了。。原以為是隔離級別的問題,沒在意。然後繼續執行邏輯處理,
出現異常conn.reollback()了。。此時再一看 插入的數據沒有回滾。代碼檢查N次沒查出問題。
無奈又要問度娘,谷爺。。。此段時間乃是煎熬啊~~~~ www.2cto.com
最後還是有成果的。找到了個mysql表存儲引擎的文章。
show create table 表名;
可以看到ENGINE=MyISAM
MyISAM是指Mysql的默認存儲引擎,當create創建新表時,未指定新表的存儲引擎時,默認使用Myisam。
MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力
既然有非事務表,就應該有支持事務的表了。沒錯,度娘又告訴我了 InnoDB
InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB寫的處理效率差一些並且會占用更多的磁盤空間以保留數據和索引。
那就改吧。。
alter table 表名 engine=InnoDB;
然後再查看一下
變成InnoDB了。。
再跑次程序。。沒錯回滾了 。。。
很小個問題。。。。但如果不了解Mysql的話也挺頭痛的。。搞了幾個小時。。。無知就是悲催哈。。。。
作者 北京—王志偉