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);也完全没问题。
验证步骤
- 保存修改后的迁移文件
- 重新执行命令:
php artisan migrate:fresh
这样就能正常创建包含is_admin字段的users表了。
内容的提问来源于stack exchange,提问作者Giang An
相关产品推荐
相关产品推荐

