MySQL : on creating foreign key geting error no : 150

标签 mysql sql mysql-workbench

表 ENUMSTATE 正在重新调用 ENUMCOUNTRY 但

此代码会导致以下错误:错误代码:1005。无法创建表“easylibdb1.enumstate”(errno:150)

=> 枚举国家

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)
)

=> 枚举状态

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)  
)

最佳答案

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
Corresponding columns in the foreign key and the referenced key must have similar data types. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.

关于MySQL : on creating foreign key geting error no : 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079378/

相关文章:

php - 对加密的 MySQL 表进行排序和查询

php - 如何触发一封邮件出现多个错误

.net - Oracle 不接受 2000 年之前的日期

mysql - 奇怪的 MySQL 行为。有些行在排序后出现但在执行后不出现

MySQL 缺少右括号

mysql - 使用两个表计数并显示 0 表示没有结果 SQL

mysql - 将 Magento 属性值从 mySQL 中的一行复制到另一行

MySQL 事务和并发插入

sql - Android SQLite 无法增长

sql - Oracle - 在禁用状态下添加外部约束?