MySQL: Foreign key constraint is incorrectly formed

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
619
hi,

ich habe diese Tabelle in meiner DB:

SQL:
CREATE TABLE `activities` (
  `id` int(10) UNSIGNED NOT NULL,
  `linkid` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `clicks` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

jetzt möchte ich eine weitere mit Foreign-Key anlegen:

SQL:
CREATE TABLE `got` (
  `id` int(10) UNSIGNED NOT NULL,
  `linkid` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `ref` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
   FOREIGN KEY (linkid) REFERENCES activities(linkid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


Doch der Wert "linkid" ist angeblich nicht identisch deklariert, aber er ist doch identisch.... Ich habe eben schon mehrere neue Tabellen bei verschiedenen Datenbanken in dieser Art angelegt und nur bei dieser komme ich jetzt nicht weiter.

Code:
MySQL meldet:

#1005 - Kann Tabelle `customer835`.`got` nicht erzeugen (Fehler: 150 "Foreign key constraint is incorrectly formed") (Details…)

Was mache ich denn falsch ? ist das Problem varchar ?
 
Meine SQL-Zeit ist schon länger her, aber müsste activities.linkid nicht ein PK oder Unique oder Indexiert sein, damit du einen FK drauf verweisen lassen kannst? Und somit dürfte vermutlich auch DEFAULT NULL ungültig sein, oder?
 
  • Gefällt mir
Reaktionen: Nebuk, up.whatever, Pfandfinder und eine weitere Person
Ja, das ist exakt das Problem und mehr oder weniger exakt auch die Lösung. :daumen:

Index reicht nicht. Unique muß es schon sein. Und ein FK ist streng genommen schon irgendwie das Gegenstück zu einem PK, rein architektonisch "denke ich" wäre es gar nicht mal so doof wenn man das so lassen würde.

Ein UNIQUE in einer Tabelle ist ohnehin nicht viel mehr als ein zweiter PK-Kandidat dort.

Vielleicht mal genauer darlegen was erreicht werden soll? activities hat ja nun gar keinen primary key und rein vom Verständnis her macht linkid REFERENCES linkid auch nicht viel Sinn imo....
 
Zurück
Oben