Frage:
Warum bin ich Fehler bekommen, wenn eine Tabelle mit einem Fremdschlüssel zu ändern versuchen?Ändern von MySQL-Tabelle Fremdschlüssel hinzuzufügen führt zu Fehlern
Details:
Ich habe 1 Tisch, HSTORY
, die ich als eine Basistabelle für alle anderen spezifischen Verlaufstabellen verwenden (dh USER_HISTORY
, BROWSER_HISTORY
, PICTURE_HISTORY
....). Ich habe auch die PICTURE
und USER
Tabellen enthalten, wie sie auch genannt werden.
Historientabelle:
CREATE TABLE IF NOT EXISTS HISTORY
(
ID INT NOT NULL AUTO_INCREMENT,
VIEWERID INT NOT NULL ,
VIEWDATE TIMESTAMP NOT NULL DEFAULT NOW(),
PRIMARY KEY (ID),
FOREIGN KEY (VIEWERID) REFERENCES USER(ID)
)
engine=innodb;
USER Tabelle: (falls jemand ist gespannt)
CREATE TABLE IF NOT EXISTS USER
(
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
engine=innodb;
PICTURE Tabelle: (falls jemand gespannt ist)
CREATE TABLE IF NOT EXISTS PICTURE
(
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
engine=innodb;
PICTURE_HISTORY Tabelle:
CREATE TABLE IF NOT EXISTS PICTURE_HISTORY LIKE HISTORY;
ALTER TABLE PICTURE_HISTORY
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);
Allerdings, wenn ich dies tun, erhalte ich:
Key column 'FOREIGNID' doesn't exist in table
ich das so verstehen, dass ich zum ersten Mal FOREIGNID
schaffen müssen, aber in vielen der Beispiele auf SO sollte das obige funktionieren. Wer weiß, warum das passiert?
Ich möchte ein Beispiel sehen, wo das sollte funktionieren ... Es wird nicht funktionieren, es sei denn, FOREIGNID existiert bereits. Sie können eine Spalte nicht einfach erstellen, indem Sie eine Einschränkung erstellen, die sie verwendet. –
@Michael müsste ich zwei alter-Anweisungen ausgeben (einen um 'FOREGINID' zu erstellen und einen anderen, um es zu einem FREMDSCHLÜSSEL zu machen? Oder kann ich es auf einmal machen? – puk
Nicht wirklich sicher - Ich habe es noch nie probiert, also ich nicht weiß nicht, ob es sich beschweren wird, wenn Sie eine Aussage versuchen. Versuchen Sie es einfach: 'ALTER TABLE PICTURE_HISTORY FOREIGNID HINZUFÜGEN INT NOT NULL CONSTRAINT HINZUFÜGEN fk_pictureid FREE KEY (FOREIGNID) REFERENZEN BILD (ID);' –