首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL外键-无法解析表名

MySQL外键-无法解析表名
EN

Stack Overflow用户
提问于 2016-02-23 03:07:29
回答 1查看 2.3K关注 0票数 1

我遇到了一个令我困惑的外键问题。在运行迁移时遇到的具体错误是:

SQLSTATEHY000:一般错误: 1215不能添加外键约束(SQL: alter products添加约束products_provider_id_foreign alter (provider_id) references id (providers) on delete级联)

MySQL SHOW ENGINE INNODB STATUS;最新外键错误下的结果是:

表testdb/#sql-186_18 to:外键约束中的错误:删除级联上的外键(provider_id)引用id (providers):无法在删除级联上解析表名(providers)

我检查了以下所有内容:

  • 相同的数据类型:int
  • 相同数据长度:10
  • 相同签名:unsigned
  • 目标表是一个键:primary
  • 两个表都更正了引擎:INNODB
  • 两个表相同的字符集:utf8
  • 两个表相同的排序规则:utf8

第一个表是providers,具有一个主键id,定义为INT(10)并没有签名:

第二个表是products,它有一个名为provider_id的列,定义为INT(10)并没有签名。

当然,这个错误已经有了很好的记录,特别是在这样的情况下,但是没有一个常见的东西(including this checklist)起作用。有人认为这里有什么问题或有什么其他建议吗?

不管它的价值是什么,我的制度:

  • OSX 10.8.5
  • MySQL 5.6.11
  • 移民用的是Laravel 5.2 (但怀疑这与问题有关)

编辑

加入外键的Laravel迁移的相关部分是:

代码语言:javascript
运行
复制
Schema::table('products', function (Blueprint $table) {
    $table->foreign('provider_id')->references('providers')->on('id')->onDelete('cascade');
    $table->foreign('brand_id')->references('brands')->on('id')->onDelete('cascade');
});

产品表的创建如下所示:

代码语言:javascript
运行
复制
public function up()
{
    Schema::create('products', function(Blueprint $table) {
        $table->increments('id');
        $table->integer('provider_id')->unsigned();

提供者移徙的相关部分是:

代码语言:javascript
运行
复制
public function up()
{
    Schema::create('providers', function(Blueprint $table) {
        $table->increments('id');

最初,我使用Schema::create(...)创建表的外键部分,但是当它不能工作时,我尝试在创建之后让它出现,以防由于某种原因它没有正确地构建迁移。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 03:20:52

改变这一点:

代码语言:javascript
运行
复制
Schema::table('products', function (Blueprint $table) {
    $table->foreign('provider_id')->references('providers')->on('id')->onDelete('cascade');
    $table->foreign('brand_id')->references('brands')->on('id')->onDelete('cascade');
});

代码语言:javascript
运行
复制
Schema::table('products', function (Blueprint $table) {
    $table->foreign('provider_id')->references('id')->on('providers')->onDelete('cascade');
    $table->foreign('brand_id')->references('id')->on('brands')->onDelete('cascade');
});

您已经将该职位替换为列名和表。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35568053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档