此处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)
);
提前致谢。
答案 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