2016-12-16 7 views
1

Ich versuche, das Konzept der Fremdschlüssel Einschränkungen zu lernen, und habe die manual about mit diesen Arten von Einschränkungen gelesen. Ich verstehe diese Einschränkungen sehr gut und sie funktionieren wie beabsichtigt. Das Handbuch sagt jedoch, dass die Syntax zum Erstellen von Einschränkungen FOREIGN KEY [index_name] (index_col_name, ...) ist, aber wenn ich die folgende Abfrage ausführe, erhalten beide Fremdschlüsseleinschränkungen einen völlig anderen Namen;Constraint-Name wird ignoriert

CREATE TABLE blog_user (
    `blog` INTEGER NOT NULL, 
    `user` INTEGER NOT NULL, 

    UNIQUE `blog_user` (`blog`, `user`), 

    FOREIGN KEY `blog_reference` (`blog`) 
     REFERENCES `blog` (`id`) 
      ON UPDATE CASCADE 
      ON DELETE RESTRICT, 

    FOREIGN KEY `user_reference` (`user`) 
     REFERENCES `user` (`id`) 
      ON UPDATE CASCADE 
      ON DELETE CASCADE 
) ENGINE = InnoDB; 

Constraint-Name führt in blog_ibfk_1 statt blog_reference und user_ibfk_1 statt user_reference. Warum bekommen sie ihren eigenen Namen, anstatt den, den ich gesagt habe?

Antwort

1

als verwenden, um das CONSTRAINT Schlüsselwort zur Angabe der FK-Einschränkung wie

CONSTRAINT `blog_ibfk_1` FOREIGN KEY (`blog`) 
     REFERENCES `blog` (`id`) 
      ON UPDATE CASCADE 
      ON DELETE RESTRICT 
+0

Danke, es stellt sich heraus, dass ich nicht ganz das Handbuch verstanden. Ich dachte, dass der Constraint-Name durch den 'index_name' bestimmt wurde, aber in Wirklichkeit war es das' Symbol'. Durch Hinzufügen des 'CONSTRAINT constraint_name'-Teils werden diese korrekt benannt! – Daniel