我正在为我的数据库构建创建脚本,并且遇到了一个我无法弄清楚的错误。我已将其追溯到外键引用,但Google搜索errno(150)并没有特别有用。
失败的脚本:
create table ITEM_TBL(
IT_ITEM_ID_FLD INT AUTO_INCREMENT,
IT_ITEM_NAME_FLD VARCHAR(50),
ITY_ITEM_TYPE_FLD INT,
UT_USER_ID_FLD INT,
IT_CHECKOUT_STATUS_FLD VARCHAR(1),
IT_LAST_UPDATE_FLD DATE,
IT_LAST_ITEM_CHANGE_FLD DATE,
IT_ACTIVE_FLD VARCHAR(1),
PRIMARY KEY (IT_ITEM_ID_FLD),
FOREIGN KEY (UT_USER_ID_FLD)
REFERENCES USER_TBL(UT_USER_ID_FLD),
FOREIGN KEY (ITY_ITEM_TYPE_FLD)
REFERENCES ITEM_TYPE_TBL(ITY_ITEM_TYPE_FLD)
) ENGINE = INNODB;
(注意:它是导致错误的最后一个外键,因为当它被删除时效果很好)
外键引用表:
create table ITEM_TYPE_TBL(
ITY_ITEM_TYPE_ID_FLD INT AUTO_INCREMENT,
ITY_ITEM_TYPE_NAME_FLD VARCHAR(50),
PRIMARY KEY (ITY_ITEM_TYPE_ID_FLD)
) ENGINE = INNODB;
create table USER_TBL(
UT_USER_ID_FLD INT AUTO_INCREMENT,
UT_NAME_FLD VARCHAR(50),
UT_EMAIL_ADDRESS_FLD VARCHAR(50),
UT_CARD_NUMBER INT NOT NULL,
PRIMARY KEY (UT_USER_ID_FLD)
) ENGINE = INNODB;
我得到的具体错误是:
#1005 - 无法创建表'db.ITEM_TBL'(错误号:150)
答案 0 :(得分:0)
在创建外键关系之前,请确保您的表(带索引)已存在。喜欢这个
create table USER_TBL(
UT_USER_ID_FLD INT AUTO_INCREMENT,
UT_NAME_FLD VARCHAR(50),
UT_EMAIL_ADDRESS_FLD VARCHAR(50),
UT_CARD_NUMBER INT NOT NULL,
PRIMARY KEY (UT_USER_ID_FLD)
)ENGINE = INNODB;
create table ITEM_TYPE_TBL(
ITY_ITEM_TYPE_ID_FLD INT AUTO_INCREMENT,
ITY_ITEM_TYPE_NAME_FLD VARCHAR(50),
PRIMARY KEY (ITY_ITEM_TYPE_ID_FLD)
) ENGINE = INNODB;
create table ITEM_TBL(
IT_ITEM_ID_FLD INT AUTO_INCREMENT,
IT_ITEM_NAME_FLD VARCHAR(50),
ITY_ITEM_TYPE_FLD INT,
UT_USER_ID_FLD INT,
IT_CHECKOUT_STATUS_FLD CHAR(1),
IT_LAST_UPDATE_FLD datetime,
IT_LAST_ITEM_CHANGE_FLD DATE,
IT_ACTIVE_FLD CHAR(1),
primary key (IT_ITEM_ID_FLD),
FOREIGN KEY (UT_USER_ID_FLD)
REFERENCES USER_TBL(UT_USER_ID_FLD) ,
FOREIGN KEY (ITY_ITEM_TYPE_FLD)
REFERENCES ITEM_TYPE_TBL(ITY_ITEM_TYPE_ID_FLD)
) ENGINE = INNODB;
顺便说一句,你也有一个错字(ITY_ITEM_TYPE_ID_FLD对比ITY_ITEM_TYPE_FLD)
这适用于sqlfiddle