一般错误:1005 Can't create table ,在 laravel 中外键约束形成错误
Posted
技术标签:
【中文标题】一般错误:1005 Can\'t create table ,在 laravel 中外键约束形成错误【英文标题】:General error: 1005 Can't create table ,Foreign key constraint is incorrectly formed in laravel一般错误:1005 Can't create table ,在 laravel 中外键约束形成错误 【发布时间】:2017-05-06 16:37:08 【问题描述】:为什么 laravel 模式回复
[照亮\数据库\查询异常] SQLSTATE[HY000]: 一般错误: 1005 Can't create table
test
.#sql-13cc_d0
(errno: 150 "外键约束格式不正确") (SQL: alter tablecities
add constrai ntcities_provinces_id_foreign
外键(provinces_id
)在删除级联时引用provinces
(id
)[PDOException] SQLSTATE[HY000]:一般错误:1005 无法创建 表
test
.#sql-13cc_d0
(errno: 150 "外键约束是 格式不正确")
第一张桌子
Schema::create('provinces', function (Blueprint $table)
$table->increments('id');
$table->string('name');
$table->boolean('is_enable');
$table->boolean('is_deletable');
$table->boolean('is_editable');
$table->boolean('deleted');
$table->timestamps();
);
第二张桌子
Schema::create('cities', function (Blueprint $table)
$table->increments('id');
$table->string('name');
$table->integer('province_id')->unsigned()->index();
$table->boolean('is_enable');
$table->boolean('is_deletable');
$table->boolean('is_editable');
$table->boolean('deleted');
$table->timestamps();
$table->foreign('province_id')
->references('id')->on('provinces')
->onDelete('cascade');
);
【问题讨论】:
【参考方案1】:时间继续,但我会评论其他内容。
安迪尔是对的!您必须具有相同的类型。在这种情况下,外键的类型应该是 bigInteger
,因为您在引用表上有 bigIncrements
。
我认为这是一个小而无聊的调试的解决方案。 (对不起我的英语)
【讨论】:
其实我早就知道了。但我忘记了。 ForeignKeys 的引用表总是需要首先创建。我更改了表格的时间戳。我已经创建了我引用的表。答案对我有用。谢谢。【参考方案2】:外键和引用表必须是同一类型,自动生成的 id 是 bigInteger,所以不要将列定义为 Integer,而是使用 bigInteger insteed。这为我解决了问题
【讨论】:
【参考方案3】:尝试先建表再添加约束:
Schema::create('cities', function (Blueprint $table)
$table->increments('id');
$table->string('name');
$table->integer('province_id')->unsigned()->index();
$table->boolean('is_enable');
$table->boolean('is_deletable');
$table->boolean('is_editable');
$table->boolean('deleted');
$table->timestamps();
);
Schema::table('cities', function (Blueprint $table)
$table->foreign('province_id')->references('id')->on('provinces')->onDelete('cascade');
);
【讨论】:
【参考方案4】:您应该确保您的provinces
表迁移在cities
表迁移之前运行。
您应该更改provinces
或cities
迁移文件名,以确保provinces
表迁移文件开头的时间戳在cities
表之前。
【讨论】:
以上是关于一般错误:1005 Can't create table ,在 laravel 中外键约束形成错误的主要内容,如果未能解决你的问题,请参考以下文章
ClipboardManager 抛出以下错误:Can't create handler inside thread that has not called Looper.prepare() usin
Laravel 5.8 错误 SQLSTATE[HY000]: 一般错误: 1005 uuid
SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005