You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8迁移报错:1068多主键定义与1050表已存在问题求解

解决Laravel迁移的两个错误

一、修复多主键定义错误

你的迁移文件里,$table->increments('entry')->unsigned(); 这个方法已经自动将entry字段设为自增主键,后面又手动添加了$table->primary('entry');,导致重复定义主键,触发1068错误。

修复方法:删除迁移文件中最后一行的$table->primary('entry');。

二、修复"表已存在"错误

报错提示Table 'headers' already exists,说明数据库里已经存在headers表,但Laravel的迁移记录表(migrations)中没有记录这个迁移已执行,导致执行migrate时重复尝试创建表。

解决方法选其一即可:

方法1:手动清理后重新迁移

  1. 登录数据库,手动删除headers表;
  2. 打开migrations表,找到对应CreateHeadersTable迁移的记录并删除;
  3. 重新执行命令:php artisan migrate

方法2:使用迁移回滚(如果之前成功执行过该迁移)

如果这个迁移是最近执行的,直接回滚:

php artisan migrate:rollback

然后再重新执行迁移:

php artisan migrate

方法3:强制刷新所有迁移(谨慎使用,会清空所有表数据)

如果是开发环境且数据不重要,可以直接刷新所有迁移:

php artisan migrate:fresh

三、迁移文件的其他细节修正

除了上述错误,你的迁移文件还有几个小问题需要修正:

  • desciption拼写错误,改为description;
  • tinyInteger('currency',)和tinyInteger('aborted',)中多了多余的逗号,删除逗号;
  • ->default('NULL')建议改为->default(null),避免存入字符串'NULL'而非SQL的NULL值。

修正后的完整迁移文件:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateHeadersTable extends Migration
{
    public function up()
    {
        Schema::create('headers', function (Blueprint $table) {
            $table->increments('entry')->unsigned();
            $table->string('id',16);
            $table->string('address',256);
            $table->string('description',512)->nullable()->default(null);
            $table->tinyInteger('currency')->default(0);
            $table->decimal('sum',13,4);
            $table->datetime('entered');
            $table->tinyInteger('aborted')->default(0);
        });
    }

    public function down()
    {
        Schema::dropIfExists('headers');
    }
}

内容的提问来源于stack exchange,提问作者fhcluk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:20:33