Ich bin mir nicht sicher, warum ich hier keinen bestimmten Fremdschlüssel hinzufügen kann. Diese Tabellen wurden über MySQL Workbench generiert, und basierend auf der MySQL-Dokumentation und auf der Suche nach anderen ähnlichen Problemen/Lösungen, I Think ist alles in Ordnung ... noch kann ich nicht einen Fremdschlüssel insbesondere hinzufügen:MySQL - Warum kann ich hier keinen Fremdschlüssel hinzufügen?
inspection_statuses
. muss Referenz inspection_responses
sein. tpa_result
Was vermisse ich/übersehen?
Dies ist die Aussage, die ich den neuen Fremdschlüssel zu verwenden, ich versuche, hinzuzufügen:
ALTER TABLE `vipsouth_app`.`inspection_statuses`
ADD CONSTRAINT `inspection_statuses_ibfk_3`
FOREIGN KEY (`inspection_id`)
REFERENCES `vipsouth_app`.`inspection_responses` (`tpa_result`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Und das erzeugt diesen Fehler:
Operation fehlgeschlagen: Es gibt einen Fehler, während die SQL-Skript Anwendung zur Datenbank. FEHLER 1005: Tabelle vipsouth_app
kann nicht erstellt werden. #sql-1f48_7
(errno: 150 "über Fremdschlüssel ist falsch gebildet")
CREATE TABLE `inspection_responses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`inspection_request_id` int(10) unsigned NOT NULL,
`tpa_result` varchar(10) CHARACTER SET utf8 NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` int(10) unsigned NOT NULL DEFAULT '0',
`updated_at` timestamp NULL DEFAULT NULL,
`updated_by` int(10) unsigned DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
`deleted_by` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `tpa_result_UNIQUE` (`tpa_result`),
KEY `inspection_responses_ibfk_1_idx` (`inspection_request_id`),
CONSTRAINT `inspection_responses_ibfk_1` FOREIGN KEY (`inspection_request_id`) REFERENCES `inspection_requests` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `inspection_statuses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`inspection_request_id` int(10) unsigned NOT NULL,
`inspection_response_id` int(10) unsigned NOT NULL,
`tpa_code` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`user_id` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`inspection_id` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`status` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`note` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL,
`url` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` int(10) unsigned NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`updated_by` int(10) unsigned DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
`deleted_by` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `inspection_statuses_ibfk_1_idx` (`inspection_request_id`),
KEY `inspection_statuses_ibfk_2_idx` (`inspection_response_id`),
CONSTRAINT `inspection_statuses_ibfk_1` FOREIGN KEY (`inspection_request_id`) REFERENCES `inspection_requests` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `inspection_statuses_ibfk_2` FOREIGN KEY (`inspection_response_id`) REFERENCES `inspection_responses` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Könnten Sie eine MySQL-Fehlermeldung zurückgeben? \t Es ist wahrscheinlich, weil Typen nicht gleich sind. Sie versuchen, ein 'COLLATE' (' inspection_id varchar (10) COLLATE utf8_unicode_ci NOT NULL') mit 'tpa_result' (' varchar (10) CHARACTER SET utf8 NOT NULL') zu verknüpfen – Delphine
Ich habe die Frage mit einigen weiteren Details aktualisiert, einschließlich die Fehlermeldung, die ich bekomme. – CJG
Haben Sie versucht, den genau gleichen Typ auf "inspection_id" und "tpa_result" zu setzen? Stellen Sie sicher, dass die Einschränkung 'UNIQUE' für 'tpa_result' aktiviert ist – Delphine