我是 SQL 新手,我按照自己的理解做了所有事情,但无法创建表。说错误 1005 无法创建表 user.EMPLOYEE
和 user.STORE
(errno 150) 帮助
DROP TABLE IF EXISTS EMPLOYEE, STORE, REGION;
CREATE TABLE REGION (
REGION_CODE int NOT NULL AUTO_INCREMENT,
REGION_DESCRIPT varchar(20),
PRIMARY KEY (REGION_CODE)
)Engine=InnoDB;
CREATE TABLE EMPLOYEE (
EMP_CODE int NOT NULL AUTO_INCREMENT,
EMP_TITLE varchar(4),
EMP_LNAME varchar(15),
EMP_FNAME varchar(15),
EMP_INITIAL varchar(1),
EMP_DOB date,
STR_CODE int NOT NULL ,
PRIMARY KEY (EMP_CODE,STR_CODE),
FOREIGN key (STR_CODE) REFERENCES STORE(STORE_CODE)
) Engine=InnoDB;
CREATE TABLE STORE (
STORE_CODE int NOT NULL AUTO_INCREMENT,
STORE_NAME varchar(20),
STORE_YRD_SALES numeric,
REGION_CODE int,
EMP_CODE int NOT NULL,
PRIMARY KEY (STORE_CODE),
FOREIGN KEY (REGION_CODE) REFERENCES REGION(REGION_CODE),
FOREIGN KEY (EMP_CODE) REFERENCES EMPLOYEE(EMP_CODE)
) Engine=InnoDB;
最佳答案
错误 150 是一个无效的键约束,如果这是您创建表的顺序,则可能是由于您无法在 employee
中为当前未添加约束而导致的-现有商店
。
无法创建store
只是该问题的副作用,因为未创建employee
。一旦解决了防止出现这种情况的问题,store
中的外键限制应该没问题。
最简单的解决方案可能是在没有约束的情况下创建employee
,然后在store
存在后添加它。这将类似于(请注意 EMPLOYEE
表创建中缺少的约束):
CREATE TABLE EMPLOYEE (
EMP_CODE int NOT NULL AUTO_INCREMENT,
EMP_TITLE varchar(4),
EMP_LNAME varchar(15),
EMP_FNAME varchar(15),
EMP_INITIAL varchar(1),
EMP_DOB date,
STR_CODE int NOT NULL,
PRIMARY KEY (EMP_CODE,STR_CODE)
);
CREATE TABLE STORE ( <<no change here>> );
ALTER TABLE EMPLOYEE ADD CONSTRAINT EMP2STORE
FOREIGN KEY (STR_CODE) REFERENCES STORE(STORE_CODE);
关于mysql - 错误1005无法创建表user.EMPLOYEE和user.STORE(errno 150),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42195224/