mysql - 找不到外键格式错误的原因
问题描述
有时当我关闭 xampp 本地服务器时,某些数据表“正在使用”,我无法打开或删除它们。所以我选择最后一个备份并删除基础,由于正在使用的表,这是不可能的。
所以在stackoverflow中有些人说要手动删除phpmyadmin文件夹ibd和frm文件中的mysql数据。然后我尝试导入我的备份,他们说“外键格式不正确。
当我详细介绍它时,它会显示此文本:
最新的外键错误
2019-05-15 17:09:40 1c6c 表 service_tunnels/se_situer_a 的外键约束错误:表中没有包含作为第一列的列的索引,或者表中的数据类型与引用表中的那些或 ON ... SET NULL 列之一被声明为 NOT NULL。约束:, CONSTRAINT "FK_Se_situer_a_IDEmplacement" FOREIGN KEY ("IDEmplacement") REFERENCES "emplacement" ("IDEmplacement")
这是表 emplacement 和表 se_situer_a 的 sql 部分:
DROP TABLE IF EXISTS `emplacement`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `emplacement` (
`IDEmplacement` int(11) NOT NULL,
`NomEmplacement` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
`PointKilometrique` float DEFAULT NULL,
`NumLocal` int(11) NOT NULL,
`CodeOuvrage` varchar(25) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`IDEmplacement`,`NumLocal`,`CodeOuvrage`),
KEY `FK_Emplacement_CodeOuvrage` (`CodeOuvrage`),
CONSTRAINT `FK_Emplacement_CodeOuvrage` FOREIGN KEY (`CodeOuvrage`) REFERENCES `ouvrage` (`CodeOuvrage`),
CONSTRAINT `FK_Emplacement_NumLocal` FOREIGN KEY (`NumLocal`) REFERENCES `local` (`NumLocal`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `se_situer_a`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `se_situer_a` (
`DateMiseEnPlace` date DEFAULT NULL,
`DateEnlevement` date DEFAULT NULL,
`IDEquipement` int(11) NOT NULL,
`DateEmplacement` date NOT NULL,
`IDEmplacement` int(11) NOT NULL,
`NumLocal` int(11) NOT NULL,
`CodeOuvrage` varchar(25) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`IDEquipement`,`DateEmplacement`,`IDEmplacement`,`NumLocal`,`CodeOuvrage`),
KEY `FK_Se_situer_a_DateEmplacement` (`DateEmplacement`),
KEY `FK_Se_situer_a_IDEquipement` (`IDEquipement`),
KEY `FK_Se_situer_a_CodeOuvrage` (`CodeOuvrage`),
CONSTRAINT `FK_Se_situer_a_CodeOuvrage` FOREIGN KEY (`CodeOuvrage`) REFERENCES `ouvrage` (`CodeOuvrage`),
CONSTRAINT `FK_Se_situer_a_DateEmplacement` FOREIGN KEY (`DateEmplacement`) REFERENCES `dateemplacement` (`DateEmplacement`),
CONSTRAINT `FK_Se_situer_a_IDEmplacement` FOREIGN KEY (`IDEmplacement`) REFERENCES `emplacement` (`IDEmplacement`),
CONSTRAINT `FK_Se_situer_a_IDEquipement` FOREIGN KEY (`IDEquipement`) REFERENCES `equipement` (`IDEquipement`),
CONSTRAINT `FK_Se_situer_a_NumLocal` FOREIGN KEY (`NumLocal`) REFERENCES `local` (`NumLocal`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
非常感谢你,我不知道为什么每次我重新启动计算机时都会这样做,所以重新启动 xampp ...
解决方案
多亏了 Juan Carlos Oropeza,我才知道为什么会这样。在 MySQL 中,外键无法引用非唯一字段,因此我必须删除与此匹配的所有外键。
谢谢你,感谢stackoverflow!
推荐阅读
- tcl - TCL regsub 使用 RegEx 匹配作为关联数组中的索引
- javascript - 我无法在 vue 中打印 v-img 的图像
- amazon-web-services - 需要访问节点上的文件“etc/origin/master/master-config.yaml”?#istio
- laravel - Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 此路由不支持 POST 方法。支持的方法:GET、HEAD
- shell - 如何在使用 ssh 时退出整个 shell 脚本
- angular - 为什么小吃店的颜色没有变化?
- python - 为什么 setuptools 这么慢
- scala - Scala 库不兼容
- sql-server - 递归 CTE 的性能调优
- jestjs - 在 redux-mock-store getActions 中获取空数组