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:手动清理后重新迁移
- 登录数据库,手动删除
headers表; - 打开
migrations表,找到对应CreateHeadersTable迁移的记录并删除; - 重新执行命令:
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
相关产品推荐
相关产品推荐

