2014-01-20 47 views
0

我想创建一个表引用其他表的列。 如何制作外键?无法创建互连表

方案: 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' ( errno: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; 

回答

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; 
+0

对不起存在,这并没有解决它:-( – Taerus

+0

请与我编辑的代码 –

+0

尝试可悲的是,仍然没有成功,这些外键是一个痛苦:C – Taerus

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)