Java 如何对mysql中的两个表进行FK约束,一个表使用InnoDB,另一个表使用MyISAM
原因:liquibase.exception.jdbception:Java 如何对mysql中的两个表进行FK约束,一个表使用InnoDB,另一个表使用MyISAM,java,mysql,mysql-error-1005,Java,Mysql,Mysql Error 1005,原因:liquibase.exception.jdbception: 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`
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)
你不能。如果要在MyISAM表中创建外键,必须将其转换为InnoDB:
ALTER TABLE MyIsamTable ENGINE=InnoDB;
您可以动态执行此操作,而无需关闭数据库。您不能。如果要在MyISAM表中创建外键,必须将其转换为InnoDB:
ALTER TABLE MyIsamTable ENGINE=InnoDB;
您可以动态执行此操作,而无需关闭数据库。这很有用。但如果我想在我的表列上添加空间索引呢。因为InnoDB不支持空间索引。所以,如果我使用InnoDB创建alter table,我必须释放空间索引。所以我们可以同时使用空间索引和FK!目前不能同时拥有外键和空间索引,这太糟糕了。所以你必须选择。有关一些可能的解决方法,请参见。这很有用。但如果我想在我的表列上添加空间索引呢。因为InnoDB不支持空间索引。所以,如果我使用InnoDB创建alter table,我必须释放空间索引。所以我们可以同时使用空间索引和FK!目前不能同时拥有外键和空间索引,这太糟糕了。所以你必须选择。有关一些可能的解决方法,请参阅。