-3

ここでテーブル SEARCHAUTHOR は CATALOGUEBASE を再試行しますが、コードは次のエラーになります。

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

CATALOGUEBASETABLEのテーブル構造

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

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)        
    );

前もって感謝します。

4

1 に答える 1

0

外部キーは mysql のインデックスである必要があります。

InnoDB では、外部キーのチェックが高速になり、テーブル スキャンが不要になるように、外部キーと参照キーにインデックスが必要です。詳細はこちら

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)        
);

このクエリは機能しています。デモ

于 2013-06-13T06:24:36.593 に答える