为什么我在尝试创建此表时会出现此FK错误?错误:150“外键约束不正确

时间:2016-10-02 10:28:26

标签: mysql sql database mariadb rdbms

我在MySql DB上有这个 USER 表:

id          bigint(20) unsigned     NO      PRI     NULL    auto_increment
username    varchar(30)             NO      NULL    
pswd        varchar(40)             NO      NULL    

然后我尝试创建一个新的 ACCOMODATION 表,其中包含 user_Id 字段,该字段是上一个 USER 表的外键,I我正在这样做:

CREATE
    TABLE testdb.ACCOMODATION
    (
        Id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
        user_Id BIGINT(20) NOT NULL,


        name VARCHAR(255) NOT NULL,
        address VARCHAR(255) NOT NULL,
        tel VARCHAR(20) NOT NULL,
        mobile VARCHAR(20) NOT NULL,
        fax VARCHAR(20) NOT NULL,
        email VARCHAR(80) NOT NULL,
        cap VARCHAR(20) NOT NULL,
        nation VARCHAR(20) NOT NULL,
        region VARCHAR(20) NOT NULL,
        province VARCHAR(20) NOT NULL,
        municipality VARCHAR(20) NOT NULL,
        stars ENUM('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE') NOT NULL,
        lat BIGINT NOT NULL,
        lon BIGINT NOT NULL,
        CONSTRAINT fk_accomodation_user FOREIGN KEY (user_Id) REFERENCES testdb.user (Id),
        PRIMARY KEY (Id)
    )
    ENGINE=InnoDB DEFAULT CHARSET=latin1

但是我收到以下错误消息:

  

#1005 - 无法创建表testdbaccomodation(错误:150“外键约束形成错误”)

为什么呢?怎么了?我错过了什么?如何解决这个问题呢?

TNX

2 个答案:

答案 0 :(得分:1)

这些定义不一样:

id          bigint(20) unsigned     NO      PRI     NULL    auto_increment

user_Id BIGINT(20) NOT NULL

未签名的bigint与已签名的bigint不同。外键引用中使用的列需要与原始表中的列完全相同。

答案 1 :(得分:1)

ACCOMODATION表中user_id列的数据类型必须与用户表中id列的数据类型完全相同。

  

user_id bigint(20)unsigned NO NULL