2009-05-30 12 views
0

Ich habe eine Tabelle mit 2 Einträgen.Vorschläge zum Einfügen mit Fremdschlüssel Einschränkung in mysql

Etwas wie

CREATE TABLE `db`.`main` (
    `id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`) 
); 

die ID für diesen 2 Einträge werden Primärschlüssel automatisch erzeugt.

Ich habe eine andere Tabelle mit einer Regel verknüpfen

CREATE TABLE `db`.`day` (
    `main_id` int(10) unsigned NOT NULL, 
    `day` tinyint(4) NOT NULL, 
    CONSTRAINT `fk_db_main` FOREIGN KEY (`main_id`) REFERENCES `main` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
); 

jetzt kann ich erfolgreich ein Ergebnis bekommen mit

SELECT * FROM main where id='9'; 

aber wenn ich versuche

INSERT INTO day (main_id, day) VALUES (9, 0); 

ich

bekommen zu laufen

"Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl (db. day, CONSTRAINT fk_db_main FOREIGN KEY (main_id) LITERATUR main (id) ON NO ACTION ON UPDATE NO ACTION DELETE) (1452)“

Irgendwelche Vorschläge auf, was ich mit dem Einsatz bin fehlt?

** I hadn 't die tatsächliche Ursache des Problems aufgelistet, während Sie die Frage stellten. Der eigentliche Grund war, dass die Haupt-DB-Tabelle in MyISAM war und die InnoDB -Tabellen keinen Fremdschlüssel erstellen konnten, der sich damit verbindet. Kurz gesagt, MyISAM unterstützt nicht Fremdschlüssel, auch wenn sie von anderen Tabellen kommen

+0

Die INSERT-Anweisung sieht gut aus. –

+0

Ich bin verwirrt, dass Sie denken, dass es zwei "Einträge" in der Haupttabelle gibt. Zu meiner Art zu denken, gibt es eine Spalte - ID genannt - und es ist auch der Primärschlüssel der Tabelle. –

+1

Warum zitieren Sie auch die '9' in der SELECT? Und welches Ergebnis erhalten Sie, wenn Sie SELECT ausführen? –

Antwort

0

Ich hatte die tatsächliche Ursache des Problems nicht aufgelistet, während ich die Frage stellte. Die eigentliche Ursache war, dass die Haupt-DB-Tabelle in MyISAM war und die InnoDB-Tabellen keinen Fremdschlüssel erstellen konnten, der mit ihr verbunden war. Kurz gesagt, MyISAM unterstützt keine Fremdschlüssel, selbst wenn sie von anderen Tabellen kommen.

1

Die Fremdschlüssel - Einschränkung besagt: "Es soll ein Eintrag in der Tabelle 'main' mit einem ID-Wert, der dem neu eingefügten Wert 'main_id' in der Tabelle 'day' entspricht.

Wenn Sie den Wert 9 in 'Tag' einfügen, gibt es bereits eine Zeile in 'main' mit ID = 9?

Das DBMS denkt nicht - deshalb hat es sich beschwert.

+0

Ja, die ID von Wert 9 aus der Hauptanzeige auswählen, wo id gleich 9 ist, ergibt 9. – lief79

+0

OK - dann denke ich, dass Alex Martelli auf dem richtigen Weg ist. Es gibt eine andere Tabelle mit dem Namen 'main', die nur' 'db''main' heißt und Ihr Fremdschlüssel bezieht sich nicht auf die Tabelle, die Sie denken. –

2

Der Einsatz funktioniert für mich, wenn ich die db. Teile in den CREATE TABLE Aussagen entfernen (und legen Sie in main eine Zeile mit einer id von 9). Vielleicht ist das Problem, dass Sie das Präfix db. inkonsistent verwenden, d. H. Nach TABLE, aber nicht in der CONSTRAINT Klausel ...?

+0

+1 Ja, ich wollte vorschlagen, die Datenbank, die du abfragst, doppelt zu prüfen. –

+0

Soll die Erstellung eines Triggers keine Probleme verursachen, wenn die Daten nicht existieren? Ich muss mich darum kümmern. – lief79

Verwandte Themen