找不到为什么外键格式错误

时间:2019-05-15 15:22:35

标签: mysql datatable phpmyadmin foreign-keys mariadb

有时,当我关闭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”外键(“ IDEmplacement”)参考“ emplacement”(“ IDEmplacement”)

这是表放置和表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 ...

1 个答案:

答案 0 :(得分:0)

多亏了Juan Carlos Oropeza,我才知道为什么会这样。在MySQL中,外键无法引用非唯一字段,因此我必须删除与此匹配的所有外键。

谢谢,感谢stackoverflow!