无法创建互连表

时间:2014-01-20 17:28:07

标签: mysql sql foreign-keys

我正在尝试创建一个包含引用其他表的列的表。 我如何制作外键?

方案: enter image description here

查询:(不工作):

CREATE TABLE gebruikers_trainingen (
    gebruiker_id INT UNSIGNED NOT NULL,
    training_id INT UNSIGNED NOT NULL,
    gebruiker_naam VARCHAR(255) NOT NULL,
    training_naam VARCHAR(255),

    CONSTRAINT fk_idGebruiker FOREIGN KEY (gebruiker_id)
    REFERENCES gebruikers(id),
    CONSTRAINT fk_idTraining FOREIGN KEY (training_id)
    REFERENCES trainingen(id),
    CONSTRAINT fk_naamGebruiker FOREIGN KEY (gebruiker_naam)
    REFERENCES gebruikers(voornaam),
    CONSTRAINT fk_naamTraining FOREIGN KEY (training_naam)
    REFERENCES trainingen(naam)
) ENGINE = INNODB;

获得:

  

错误代码:1005无法创建表'konecranes.gebruikers_trainingen'   (错误:150)

编辑: 其他表的查询。

CREATE TABLE gebruikers (
    id int unsigned NOT NULL,
    voornaam varchar(255) NOT NULL,
    achternaam varchar(255) NOT NULL,
    account_level int unsigned NOT NULL,
    PRIMARY KEY (id, voornaam)
) ENGINE = InnoDB;

CREATE TABLE trainingen (
    id int unsigned NOT NULL,
    naam varchar(255) NOT NULL,
    PRIMARY KEY (id, naam)
) ENGINE = InnoDB;

3 个答案:

答案 0 :(得分:1)

您应该在外键上添加索引:

CREATE TABLE gebruikers_trainingen (
    gebruiker_id INT UNSIGNED NOT NULL,
    training_id INT UNSIGNED NOT NULL,
    gebruiker_naam VARCHAR(255) NOT NULL,
    training_naam VARCHAR(255) NOT NULL,

    INDEX (gebruiker_id, gebruiker_naam),
    INDEX (training_id, training_naam),

    CONSTRAINT fk_idGebruiker FOREIGN KEY (gebruiker_id, gebruiker_naam) 
    REFERENCES gebruikers(id, voornaam),

    CONSTRAINT fk_idTraining FOREIGN KEY (training_id, training_naam) 
    REFERENCES trainingen(id, naam)
) ENGINE = INNODB;

答案 1 :(得分:0)

这张桌子以不同的形式存在吗?

Mysql 1005 error when creating table using InnoDB engine

Hth Oli

答案 2 :(得分:0)

如下所示合并约束确实有效。还要感谢Justin Lurman帮助我,不得不添加索引。

CONSTRAINT fk_gebruikers FOREIGN KEY (gebruiker_id, gebruiker_naam) REFERENCES gebruikers(id, voornaam),
CONSTRAINT fk_trainingen FOREIGN KEY (training_id, training_naam) REFERENCES trainingen(id, naam)