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

Laravel执行migrate:fresh迁移MySQL时出现「仅允许一个自增列且需定义为键」错误的求助

解决Laravel迁移中MySQL 1075错误的问题

我一眼就看出问题所在了——你在定义is_admin字段时用错了参数!

错误原因

看你代码里的这一行:

$table->tinyInteger('is_admin',2);

Laravel的tinyInteger方法第二个参数是布尔类型的自增标识($autoIncrement),不是长度!你传入的2会被PHP解析为true,导致is_admin被错误设置为自增字段。而你的表已经有id这个自增主键了,MySQL规定一张表只能有一个自增列,且必须作为键,这就是触发SQLSTATE[42000]: 1075错误的根本原因。

修复方案

如果你想给is_admin设置长度,需要用链式调用的->length()方法,而不是把长度当第二个参数传。另外推荐给这个字段加个默认值(比如默认0表示普通用户),这样更合理:

修复后的up方法代码:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        // 正确的字段定义方式
        $table->tinyInteger('is_admin')->length(2)->default(0);
        $table->rememberToken();
        $table->timestamps();
    });
}

如果不需要指定长度,直接写$table->tinyInteger('is_admin')->default(0);也完全没问题。

验证步骤

  1. 保存修改后的迁移文件
  2. 重新执行命令:
php artisan migrate:fresh

这样就能正常创建包含is_admin字段的users表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:53:11