2013-02-22 18 views
1

原因:liquibase.exception.JDBCException:如何把FK約束兩個表在MySQL與InnoDB的一個表,另一個是MyISAM的

Error executing SQL ALTER TABLE `User` ADD CONSTRAINT `fk_user_location` FOREIGN KEY (`location_id`) REFERENCES `Location`(`id`) ON DELETE CASCADE: 
      Caused By: Error executing SQL ALTER TABLE `UserLocation` ADD CONSTRAINT `fk_user_location_location_id` FOREIGN KEY (`location_id`) REFERENCES `Location`(`id`) ON DELETE CASCADE: 
      Caused By: Can't create table 'usiapp_db.#sql-399a_177a7' (errno: 150) 

回答

1

你不能。你有你的MyISAM錶轉換爲InnoDB的,如果你想創建外鍵或從中:

ALTER TABLE MyIsamTable ENGINE=InnoDB; 

您可以動態地做到這一點,沒有考慮下你的數據庫。

+0

這很有用。但是如果我想在我的表格列上添加SPATIAL索引會怎麼樣。因爲InnoDB不支持SPACIAL索引。因此,如果我使用InnoDB創建更改表,我必須釋放SPATIAL索引。所以我們可以有SPATIAL索引和FK兩種! – kedar 2013-02-22 06:50:24

+0

目前你不能同時擁有(外鍵和空間索引),這太糟糕了。所以你必須選擇。對於一些可能的解決方法參見[如何獲得空間索引功能如果我主要使用InnoDB(http://dba.stackexchange.com/questions/19306/how-do-i-get-spatial-index-feature-if- I-主要使用-InnoDB的)。 – Perception 2013-02-22 06:56:52

+0

是的。這太糟糕了。謝謝! – kedar 2013-02-22 06:59:35