天天看點

Liquibase異常 mysql資料庫 Cannot add foreign key constraint

Caused by: java.sql.SQLException: Cannot add foreign key constraint

檢視DATABASECHANGELOG 日志

使用h2資料庫時,liquibase是能夠正确建立表和外鍵以及索引,但是換到mysql的時候,無法成功建立外鍵。手動執行添加外鍵也無法成功

手動執行sql語句

ALTER TABLE datasync_monitor.table_monitor_strategy ADD CONSTRAINT fk_account_table FOREIGN KEY (account_monitor_strategy_id) REFERENCES datasync_monitor.account_monitor_strategy (id)           

複制

報錯

錯誤代碼: 1215

Cannot add foreign key constraint

既然liquibase能夠在h2上成功建立表以及外鍵,但是在mysql上建立不了,而且表存在手動也不能添加外鍵,估計就是mysql的原因了。

Mysql添加不了外鍵原因有三:

(1)外鍵對應的字段資料類型不一緻

(2)兩張表的存儲引擎不一緻

(3)設定外鍵時“删除時”設定為“SET NULL”

一個個排除,發現table_monitor_strategy這張表對應account_monitor_strategy這張表的外鍵字段是設計成varchar類型的,而account_monitor_strategy中的id是bigint型的,是以才會出現無法建立外鍵的問題。

這個問題可能是mysql特有的,在h2上依然能夠成功建立外鍵。