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:
- logging_session
- master_id 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?
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
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
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