mysql在入庫的時候報這個錯

一般的原因
Mapper interface和xml文件的定義對應不上,需要檢查包名,namespace,函數名稱,方法名稱等能否對應上。
按以下步驟一一執行:
1、檢查xml文件 和 interface 是否在一個包下
2、檢查xml文件的namespace 是否和 interface 一一對應
3、檢查接口的方法名是否和xml的id 一致。
5、去掉xml文件中的中文注釋
6、隨意在xml文件中加一個空格或者空行然后保存
我后面發現是xml里面沒有 方法對應的sql【意不意外】。
修改完成后,測試環境保存成功,結果在生產上報如下錯誤

liuzhizhi@lzz-rmbp|sakila-db # mysql -uroot -p < sakila-data.sql Enter password: ERROR 1785 (HY000) at line 81: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.
查了一下發現是和mysql的存儲引擎有關系,
因為代碼里有這樣的語句
public void insert(TInterfaceLogNew interfaceLogVoNew, TInterfaceLogNewConcent interfaceLogNewConcent) { logger.info("[接口日志]保存開始."); interfaceLogNewConcentDao.insert(interfaceLogNewConcent); interfaceLogNewDao.insertLog(interfaceLogVoNew); logger.info("[接口日志]保存成功."); }
這個方法是在一個事物里面的,而 t_interface_log_new_concent 的表的 引擎是InnoDB

另一個表的引擎是 MyISAM,
后來將表都改為 InnoDB,入庫不報錯。
但是 有幾張表是進行了分表,需要 關聯查詢的。
查詢會報錯

最后的解決方案是 所有這幾張表都改為: MyISAM。
==============================================后續
前幾天在測試環境測試數據,修改了其中一張表的字段長度。
然后就報這個錯了

注意注意,這幾張分表是榮辱與共的關系,唇寒齒亡!!
所有的 表的結構(索引、引擎、列、字符集等)要完全一致,完全!全!
如果 幾張表的 decimal 類型的字段不一致。查詢表的匯總會出問題!!
