2017-02-27 5 views
0

Ich kämpfe um einen Fremdschlüssel mit der folgenden Abfrage zu erstellen:Fehler 1215: Kann nicht über Fremdschlüssel hinzufügen (InnoDB)

alter table `users` add constraint `users_sales_partner_id_foreign` foreign key (`sales_partner_id`) references `structures` (`sales_partner_id`) on update cascade 

InnoDB-Log sagt, es nicht diesen Index mithalten können:

2017-02-27 10:25:47 Fehler bei Fremdschlüssel von Tabelle website_backend/users: Fremdschlüssel (sales_partner_id) Referenzen structures (sales_partner_id) auf Update Kaskade: kann nicht einen Index finden Sie im Handbuch referenzierte Registerkarte le, wobei die referenzierten Spalten als erste Spalten oder Spaltentypen in der Tabelle und die referenzierte Tabelle nicht für die Abhängigkeit übereinstimmen.

Ich habe bereits überprüft, Fehler und Datentyp-Inkompatibilität, aber alles scheint in Ordnung zu sein:

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `profile_id` int(10) unsigned NOT NULL, 
    `sales_partner_id` int(11) NOT NULL, 
    `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `state` enum('pending','confirmed','active','deactivated') COLLATE utf8mb4_unicode_ci NOT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `users_profile_id_unique` (`profile_id`), 
    UNIQUE KEY `users_sales_partner_id_unique` (`sales_partner_id`), 
    UNIQUE KEY `users_email_unique` (`email`), 
    CONSTRAINT `users_profile_id_foreign` FOREIGN KEY (`profile_id`) REFERENCES `profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 

CREATE TABLE `structures` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `sales_partner_id` int(11) NOT NULL, 
    `sales_partner_structure` int(11) DEFAULT NULL, 
    `active` tinyint(1) NOT NULL, 
    `blocked` tinyint(1) NOT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 

Ich kann mein Problem nicht bekommen, hat jemand eine Ahnung? Danke im Voraus!

+1

Die referenzierte Spalte sollte indiziert werden. Aber (normalerweise) sollte es auch einzigartig sein. Sind Sie sicher, dass dieser FK die Relation richtig anpasst? –

+0

Nun, Sie haben Recht bezüglich der Einzigartigkeit: Das Problem ist, dass 'sales_partner_id' aufgrund der vorherigen Struktur des Kunden nicht eindeutig in' Strukturen' ist. Aber ich dachte, InnoDB sollte sich trotzdem darum kümmern. –

+1

Also, warum willst du das FK definieren? Es kommt mir nicht vernünftig vor. Sie könnten einen nicht eindeutigen Index für Strukturen (sales_partner_id) definieren und Ihre ALTER-Anweisung wird danach funktionieren. Aber ich bin mir ziemlich sicher, dass du versuchst, etwas wirklich falsches zu machen. –

Antwort

0

Dank Paul Spiegel für seine Erinnerung, dass ich FKs nur auf die indizierten Felder setzen kann. Nach einer anderen Überprüfung bemerkte ich, dass mein referenziertes Feld nicht indiziert war, das löste mein Problem.

Verwandte Themen