一般错误: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 tablereceivers
add constraintreceivers_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】:我没有看到member
、blood_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)”