一般错误:1005 无法创建表 errno:150“外键约束格式不正确”)

Posted

技术标签:

【中文标题】一般错误:1005 无法创建表 errno:150“外键约束格式不正确”)【英文标题】:General error: 1005 Can't create table errno: 150 "Foreign key constraint is incorrectly formed") 【发布时间】:2018-02-04 09:50:58 【问题描述】:

块引用 SQLSTATE[HY000]: 一般错误: 1005 Can't create table gps.#sql-9e4_161 (errno: 150 "外键约束格式不正确") (SQL: alter table receivers add constraint receivers_hospital_id_foreign foreign key ( hospital_id) 引用 hospitals (id))


    Schema::create('users', function (Blueprint $table) 
        $table->increments('id');
        $table->string('name');
        $table->timestamp('dob');
        $table->string('profile_image');
        $table->string('profession')->nullable();
        $table->string('email')->unique();
        $table->string('weight');
        $table->string('message');
        $table->rememberToken();
        $table->timestamps();
        $table->softDeletes();

    );



    Schema::create('receivers', function (Blueprint $table) 
        $table->increments('id');
        $table->integer('member_id')->unsigned()->index();
        $table->integer('hospital_id')->unsigned()->index();
        $table->timestamps();
        $table->softDeletes();
        $table->foreign('member_id')->references('id')->on('members');
        $table->foreign('hospital_id')->references('id')->on('hospitals');
    );



    Schema::create('hospitals', function (Blueprint $table) 
        $table->increments('id');
        $table->string('h_name');
        $table->integer('country_id')->unsigned()->index();
        $table->integer('donate_id')->unsigned()->index();
        $table->softDeletes();
        $table->timestamps();
        $table->foreign('country_id')->references('id')->on('countries');
        $table->foreign('donate_id')->references('id')->on('donates');


    );



    Schema::create('donates', function (Blueprint $table) 
        $table->increments('id');
        $table->date('date');

        $table->date('last_bleed');
        $table->string('quantity');
        $table->string('comments');
        $table->integer('blood_group_id')->unsigned()->index();
        $table->integer('member_id')->unsigned()->index();

        $table->timestamps();
        $table->softDeletes();
        $table->foreign('blood_group_id')->references('id')-
                             >on('blood_groups');
        $table->foreign('member_id')->references('id')->on('members');
        $table->timestamps();
    );


【问题讨论】:

Schema::create('countries', function (Blueprint $table) $table->increments('id'); $table->integer('user_id')->unsigned() ->index(); $table->integer('hospital_id')->unsigned()->index(); $table->integer('receiver_id')->unsigned()->index(); $table ->timestamps(); $table->foreign('user_id')->references('id')->on('users'); $table->foreign('hospital_id')->references('id' )->on('hospitals'); $table->foreign('receiver_id')->references('id')->on('receivers'); );雅国卡表哈 请发送您的整个迁移文件,目前尚不明确 【参考方案1】:

我没有看到memberblood_groups 表来全面检查所有内容。

检查一下

1) 所有外键都应该匹配它们匹配的主键类型。 例如,如果您使用increments 进行PK,请确保FK 的类型为unsignedInteger

2) 确保顺序正确。如果没有表,则无法创建外键。对于代码,我认为它应该类似于

另外,我发现在hospitals 表中你有FK (country_id) 到countries 表,在countries 表中你有FK (hospital_id) 到hospitals 表。你不能那样做,应该只有一个(可能是country_id)。原因是因为(我不知道哪个是先创建的,所以假设它是hospitals)当您创建hospitals 时,您尝试对不存在的表进行FK。

【讨论】:

以上是关于一般错误:1005 无法创建表 errno:150“外键约束格式不正确”)的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [HY000]:一般错误:1005无法创建表`Projectname`.`users`(errno:150“外键约束格式不正确”)[重复]

SQLSTATE [HY000]:一般错误:1005 无法创建表 `ic`.`livros`(errno: 150 "外键约束格式不正确") id`))

MySQL创建表:错误1005 errno:150“外键约束形成错误”

MySQL“错误 1005 (HY000): 无法创建表 'foo.#sql-12c_4' (errno: 150)”

MySQL 错误:#1005 - 无法创建表 (errno: 150) 当我尝试创建超过 1 个 FK

MySQL 错误:#1005 - 无法创建表 (errno: 150) 当我尝试创建超过 1 个 FK