创建外键时出错(错误代码:1005)

时间:2013-06-13 05:58:49

标签: mysql sql foreign-keys mysql-workbench

此处SEARCHAUTHOR表反驳CATALOGUEBASE,但代码导致以下错误:

Error Code: 1005. Can't create table 'easylibdb1.SEARCHAUTHOR' (errno: 150)

CATALOGUEBASE TABLE

的表结构
CREATE TABLE IF NOT EXISTS CATALOGUEBASE(

        ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
        TITLE VARCHAR(250),
        SUBTITLE VARCHAR(250),
        AUTHOR VARCHAR(100),
        EDITION VARCHAR(500) DEFAULT '',
        TITLENUMBER VARCHAR(500),
        PRIMARY KEY (ID)
    );

SEARCHAUTHOR TABLE

CREATE TABLE IF NOT EXISTS SEARCHAUTHOR(

        ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
        TITLENUMBER VARCHAR(500),
        AUTHOR VARCHAR(250) DEFAULT '',
        SEQUENCE INT UNSIGNED,
        PRIMARY KEY (ID),
        FOREIGN KEY (TITLENUMBER) REFERENCES CATALOGUEBASE (TITLENUMBER)        
    );

提前致谢。

1 个答案:

答案 0 :(得分:0)

外键必须是mysql中的索引。

InnoDB需要外键和引用键的索引,以便外键检查速度快,不需要进行表扫描。阅读更多here

CREATE TABLE IF NOT EXISTS CATALOGUEBASE(

    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    TITLE VARCHAR(250),
    SUBTITLE VARCHAR(250),
    AUTHOR VARCHAR(100),
    EDITION VARCHAR(500) DEFAULT '',
    TITLENUMBER varchar(200),
    PRIMARY KEY (ID),
    INDEX(TITLENUMBER)
);

CREATE TABLE IF NOT EXISTS SEARCHAUTHOR(

    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    TITLENUMBER varchar(200),
    AUTHOR VARCHAR(250) DEFAULT '',
    SEQUENCE INT UNSIGNED,
    PRIMARY KEY (ID),
    FOREIGN KEY (TITLENUMBER) REFERENCES CATALOGUEBASE(TITLENUMBER)        
);

此查询正在运行。 DEMO

相关问题