MySQL:关于创建外键获取错误号:150

时间:2013-06-13 04:40:38

标签: mysql sql mysql-workbench

表ENUMSTATE重写ENUMCOUNTRY但是

此代码导致此错误:错误代码:1005。无法创建表'easylibdb1.enumstate'(错误号:150)

=> Enum国家

CREATE TABLE IF NOT EXISTS ENUMCOUNTRY(

    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(50) DEFAULT '',
    SHORTNAME VARCHAR(50) DEFAULT '',
    STATUS BIT DEFAULT FALSE,
    PRIMARY KEY (ID)
)

=> Enum STATE

CREATE TABLE IF NOT EXISTS ENUMSTATE(

    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(50) DEFAULT '',
    SHORTNAME VARCHAR(50) DEFAULT '',
    STATUS BIT DEFAULT FALSE,
    COUNTRYID INT,      
    PRIMARY KEY (ID)
    FOREIGN KEY (COUNTRYID) REFERENCES ENUMCOUNTRY(ID)  
)

4 个答案:

答案 0 :(得分:2)

使用

更改ENUMSTATE的表格定义
CREATE TABLE IF NOT EXISTS ENUMSTATE(

    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(50) DEFAULT '',
    SHORTNAME VARCHAR(50) DEFAULT '',
    STATUS BIT DEFAULT FALSE,
    COUNTRYID INT UNSIGNED,   -- < type should be UNSIGNED as PK in ENUMCOUNTRY  
    PRIMARY KEY (ID),  -- < you're missing comma here
    FOREIGN KEY (COUNTRYID) REFERENCES ENUMCOUNTRY(ID)  
);

这是 SQLFiddle 演示

  

<强> Using FOREIGN KEY Constraints
  外键中的对应列   并且引用的键必须具有类似的数据类型。大小和标志   整数类型必须相同。字符串类型的长度不需要   是相同的。对于非二进制(字符)字符串列,该字符   设置和整理必须相同。

答案 1 :(得分:0)

您在ENUMSTATE表格中PRIMARY KEY (ID)之后错过了逗号

答案 2 :(得分:0)

ENUMSTATE

中有2个错误
  1. 您在PRIMARY KEY (ID)

    之后缺少逗号
    PRIMARY KEY (ID),
    
  2. 外键必须具有在参考表(参考表中的主键)中定义的相同定义,并且具有相同的数据类型和大小。

    COUNTRYID INT UNSIGNED
    

答案 3 :(得分:0)

ENUMSTATE表中的PRIMARY KEY (ID)后面没有逗号。这就是你遇到语法错误的原因。