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

Posted

技术标签:

【中文标题】SQLSTATE [HY000]:一般错误:1005 无法创建表 `ic`.`livros`(errno: 150 "外键约束格式不正确") id`))【英文标题】:SQLSTATE[HY000]: General error: 1005 Can't create table `ic`.`livros`(errno: 150 "Foreign key constraint is incorrectly formed") id`)) 【发布时间】:2021-09-23 16:47:58 【问题描述】:

我想从表“users”中用de外键“users_id”创建de表“livros”,但我无法迁移。

表格:

public function up()
    
        Schema::create('livros', function (Blueprint $table) 
            $table->id();
 
            $table->integer('users_id');
            $table->foreign('users_id')->references('id')->on('users');
            /*Auth::user()->id;*/

            $table->text('namel');
            $table->string('autor');
            $table->string('editora');
            $table->string('categoria');
            $table->string('classificação');
            $table->text('descricao');
            $table->string('image')->nullable();
            $table->timestamp('created_at')->nullable();
            $table->timestamp('updated_at')->nullable();


        );
     

【问题讨论】:

把这个改成$table->unsignedBigInteger('users_id'); livros 上的 users_id 和 users 上的 id 的列定义必须匹配。默认情况下,在 Laravel 8 中,主键的列定义是 unsignedBigInteger,因此将其用于 users_id。 请向我们展示用户表迁移 【参考方案1】:

你的外键需要和你的父键类型相同,users$table->id();中的父键是一个无符号大整数,所以你的外键也需要相同类型,改变:

$table->integer('users_id');
$table->foreign('users_id')->references('id')->on('users');

$table->unsignedBigInteger('users_id');
$table->foreign('users_id')->references('id')->on('users');

或者,使用foreignId

$table->foreignId('user_id')->constrained();

【讨论】:

以上是关于SQLSTATE [HY000]:一般错误:1005 无法创建表 `ic`.`livros`(errno: 150 "外键约束格式不正确") id`))的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [HY000]:一般错误:1364 字段“标题”没有默认值

SQLSTATE [HY000]:一般错误:2053

PDO 错误:SQLSTATE [HY000]:一般错误:2031

SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005

SQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值

SQLSTATE[HY000]:一般错误:1366 整数值不正确: