mysql - 错误1005无法创建表user.EMPLOYEE和user.STORE(errno 150)

标签 mysql

我是 SQL 新手,我按照自己的理解做了所有事情,但无法创建表。说错误 1005 无法创建表 user.EMPLOYEEuser.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/

相关文章:

php - Android - 值未通过 php 存储到 MySQL 数据库中

mysql - 根据同一个表的不同条件,我需要两个不同的列值

mysql - 如何在 SELECT 语句中使用 SQL 值作为其列名?

java - 通过 Java GUI 向 mysql 表插入值

php - 如何在 Join Query 中删除具有相同 id 的重复行?

mysql - 左联接列上的 SUM 限制了结果

mysql - CakePHP:查找 ('count' ) 和 DISTINCT 字段与查找 ('all' ) 和 GROUP BY 字段

mysql - Qt MySQL -------- 无法打开包含文件 : 'mysql.h' :

php - 将时间字符串存储到 Laravel 中的 TIME 列

mysql - JSON_CONTAINS 跨表