2016-11-25 4 views
-1

I versuchen, dies zu tun, in mysql:MySQL: Verbundprimärschlüssel als Fremdschlüssel

Erstellen einer ersten Tabelle mit A, B, C-Säulen und einem zusammengesetzten Primärschlüssel für A und B. eine zweite Tabelle A Erstellen , B, D, E Spalten mit A, B, D als Primärschlüssel und natürlich A, B als Fremdsprache aus der ersten Tabelle.

Ich benutze MySQL Workbench Spalten erstellt, fügen Zwänge Schlüssel und foreigns, aber wenn ich anzuwenden versuchen, erhalte ich diesen Fehler:

ERROR 1215: Kann nicht fremd hinzufügen Schlüsseleinschränkung

Die Sache ist, dass ich Ich weiß nicht, was genau mit meinem Design nicht stimmt.

Können Sie mir helfen?

+0

Bitte geben Sie ein [mcve] und lesen [fragen]. Insbesondere zeigen Sie Ihre DDL. Wahrscheinlich wissen Sie nicht, dass die referenzierten Spalten eines FK als PK oder UNIQUE NOT NULL deklariert werden müssen. (Hier AB in ABDE.) Aber "als Fremdschlüssel referenziert" macht keinen Sinn. Ein FK führt die Referenzierung durch. Und ich erwarte, dass Sie tatsächlich ABDE (AB) REFERENZEN ABC (AB) wollen. Bitte googlen Sie eine Beschreibung Ihres Problems (mit "Referenzen" den richtigen Weg), das ist eine FAQ. – philipxy

Antwort

0

Ihr Problem ist, dass Sie (A, B) Paare in der zweiten Tabelle haben, die keine Übereinstimmungen in Ihrer ersten Tabelle haben.

Run this:

select secondTable.A, secondTable.B 
from secondTable 
where not exists (select 1 
        from firstTable 
        where firstTable.A = secondTable.A and firstTable.B = secondTable.B); 

Mit dieser Abfrage werden Sie A, B Werte in secondTable finden, die alle Datensätze nicht in firstTable entsprechen.

Um in der Lage sein, Ihre foreign key zu erstellen, müssen Sie entweder die Datensätze aus secondTable oder insert ihren Spielen intofirstTable entfernen.

+0

Danke für die Hilfe. Eigentlich habe ich keine Daten in der zweiten Tabelle, weil ich es baue. –

+0

@RonanQuintin, stimmen die Typen der Tabellen überein? Kannst du uns etwas Code geben? –