Не могу найти, почему Внешний ключ сформирован неправильно - PullRequest
0 голосов
/ 15 мая 2019

Иногда, когда я выключаю локальный сервер xampp, некоторые данные «используются», и я не могу их открыть или удалить.Поэтому я выбираю последнюю резервную копию и сбрасываю базу, что невозможно из-за используемых таблиц.

Так что в stackoverflow некоторые парни сказали, что нужно вручную удалить данные mysql в папке phpmyadmin ibd и frm.И затем я пытаюсь импортировать свою резервную копию, и они говорят: «Внешний ключ неправильно сформирован.

Когда я перехожу к деталям, он показывает этот текст:

ПОСЛЕДНЯЯ ОШИБКА ИНОСТРАННОГО КЛЮЧА

2019-05-15 17:09:40 1c6c Ошибка в ограничении внешнего ключа таблицы service_tunnels / se_situer_a: в таблице нет индекса, который бы содержал столбцы в качестве первых столбцов, или типы данных в таблице не соответствуютв указанной таблице или в одном из столбцов ON ... SET NULL объявляется как NOT NULL.Вот часть sql для размещения таблиц и таблицы se_situer_a:

    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 голосов
/ 16 мая 2019

Благодаря Хуану Карлосу Оропезе я узнал, почему это происходит.В MySQL внешний ключ не может ссылаться на неуникальное поле, поэтому мне пришлось удалить все внешние ключи, которые соответствуют этому.

Спасибо вам и благодаря stackoverflow!

...