2017-04-21 7 views
2

Ich habe zwei Tabellen in MySQL erstellt. Ihre erstellen Abfrage sind wie folgtMySQL Fehlercode: 1215. Kann keine Fremdschlüsseleinschränkung hinzufügen

CREATE TABLE ix_consultant_affected_columns (
    master_id int(10) NOT NULL, 
    logging_session int(10) NOT NULL, 
    text_id bigint(20) NOT NULL, 
    table_id int(10) NOT NULL, 
    column_id int(10) NOT NULL, 
    PRIMARY KEY (text_id, master_id, logging_session, table_id, column_id) 
) ENGINE = INNODB DEFAULT charset = latin1; 

CREATE TABLE ix_consultant_query_text (
    master_id int(10) NOT NULL, 
    logging_session int(10) NOT NULL, 
    text_id bigint(20) NOT NULL, 
    count int(10) NOT NULL, 
    discarded tinyint(3) DEFAULT NULL, 
    query_type varchar(1) DEFAULT NULL, 
    no_tuner_score float DEFAULT NULL, 
    num_rows_affected float DEFAULT NULL, 
    text_plan longtext, 
    PRIMARY KEY (logging_session, master_id, text_id) 
) ENGINE = INNODB DEFAULT charset = latin1; 

Jetzt möchte ich Fremdschlüssel in alter Abfrage anwenden. Aber es gibt
Fehlercode: 1215 nicht über Fremdschlüssel hinzufügen
Die alte Abfrage ist:

ALTER TABLE ix_consultant_affected_columns 
    ADD FOREIGN KEY (master_id) REFERENCES ix_consultant_query_text (master_id), 
    ADD FOREIGN KEY (logging_session) REFERENCES ix_consultant_query_text (logging_session), 
    ADD FOREIGN KEY (text_id) REFERENCES ix_consultant_query_text (text_id); 

habe ich versucht, für Einschränkungen oder Datentyp Unterschiede zwischen zwei suchen. Aber ich kann das Problem nicht identifizieren.
Hinweis: Wenn ich alter Query nur mit der Spalte logging_session ausführen, funktioniert die Abfrage ordnungsgemäß und Fremdschlüssel wird angewendet. Das Problem ist mit master_id und text_id

EDIT:

ich das Problem gefunden ist, dass die Alte Abfrage ist nicht in der Reihenfolge der referenzierten Tabelle. Der Primärindex sequnce in ix_consultant_query_text Tabelle ist:

  1. logging_session
  2. master_id
  3. TEXT_ID

Also, wenn ich die Alte Abfrage in der referenzierten Tabelle primärer Indexfolge erstellt es funktioniert gut.

ALTER TABLE ix_consultant_affected_columns 
    ADD FOREIGN KEY (logging_session,master_id,text_id) REFERENCES ix_consultant_query_text(logging_session,master_id,text_id) 

Das Problem ist jetzt, dass ich diese Alte Abfrage dynamisch bin zu schaffen, also ist es eine Möglichkeit, die Reihenfolge der Spalten (Primärindex) von referenzierten Tabelle zu bekommen?

Antwort

0

Sie versuchen, zum nächsten Felder in ix_consultant_query_text Tabelle drei Fremdschlüssel hinzuzufügen:

  • text_id
  • master_id
  • logging_session

Aber nur ix_consultant_query_text. logging_session ist einzigartig. Für die Erstellung von Fremdschlüsseln müssen alle referenzierten Felder eindeutig sein.

+0

Primärschlüssel wird auf text_id, master_id und logging_session in ix_consultant_query_text angewendet. Wie ist logging_session nur einzigartig? Auch was könnte die Lösung dafür sein? – User14141111

+0

Der Primärschlüssel ist komplex, er enthält mehrere Felder: 'logging_session',' master_id', 'text_id'. Wir können sagen, dass alle diese Felder eine einzigartige Gruppe bilden. Und wir können sagen, dass nur das erste Feld auch einzigartig ist. Alle anderen sind nicht einzigartig. – Devart

+0

Müssen Sie drei Fremdschlüssel erstellen? Oder ist es möglich, einen komplexen Fremdschlüssel mit drei verwandten Feldern zu erstellen? Ich denke, du solltest mehr über das Datenbankschema erzählen, das du brauchst. – Devart

Verwandte Themen