mysql-错误代码:1215如果添加了全文索引,则无法添加外键约束

3duebb1j  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(501)

我有一个数据库,我用 --no-data . 我试图在一个空数据库中导入该数据库结构。
我忽略了其他的查询,在我试图执行的查询之后,

set foreign_key_checks=0;
DROP TABLE IF EXISTS `ACTIVITY`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ACTIVITY` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  ...
  `ACTIVITY_BY_ID` int(11) DEFAULT NULL,
  `ENTITY_TYPE` varchar(45) COLLATE utf8_unicode_ci NOT NULL, -- this
  `ACTIVITY_TYPE` varchar(45) CHARACTER SET utf8 NOT NULL, -- this
  ...
  PRIMARY KEY (`ID`),
  KEY `FK_ACTIVITY_TO_USER_idx` (`ACTIVITY_BY_ID`),
  FULLTEXT KEY `FK_FULL_TEXT_ACTIVITY_TYPE` (`ACTIVITY_TYPE`), 
  FULLTEXT KEY `FK_FULL_TEXT_ENTITY_TYPE` (`ENTITY_TYPE`), 
  ...
  CONSTRAINT `FK_ACTIVITY_TO_USER` FOREIGN KEY (`ACTIVITY_BY_ID`) REFERENCES `USER` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

上面的代码不能说明 Error Code: 1215. Cannot add foreign key constraint 它应该在外键检查设置为0时工作。
下面是用于导入的sql USER table。不过,这个sql将在稍后执行。

DROP TABLE IF EXISTS `USER`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `USER` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  ...
  PRIMARY KEY (`ID`),
  ..
) ENGINE=InnoDB AUTO_INCREMENT=4070 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

如果我执行 USER 先写剧本再写 ACTIVITY ,则有效,否则无效。
我标记的线条 --this 为了那张table ACTIVITY 是问题的根源。如果去掉这两行代码,代码就可以正常工作。
为什么全文索引会创建外键问题?

klh5stk1

klh5stk11#

显然这是mysql社区服务器版本中的一个bug 5.7.8-rc .
我们升级到 5.7.20 问题解决了。

相关问题