Laravel迁移报错:SQLSTATE[42000] 表定义错误(仅一个自增列)
问题解决:Laravel迁移报错1075(多自增列冲突)
问题原因
你写的$table->tinyInteger('status', 2);触发了错误,因为Laravel的Blueprint中,tinyInteger方法的第二个参数是是否设置自增(布尔类型),而非字段长度。传入数字2会被解析为true,导致status被设为自增列,而表中已经有id这个自增主键,MySQL不允许单表存在多个自增列,因此抛出1075错误。
解决方法
根据你的需求选择对应写法:
- 若只是想设置字段的显示宽度(仅影响MySQL的显示,不限制取值范围),使用
->length(2)链式调用:$table->tinyInteger('status')->length(2); - 若不需要设置显示宽度,直接定义字段即可:
$table->tinyInteger('status'); - 如果
status是用来存固定的状态枚举值(比如0=未开始,1=进行中,2=已完成),更推荐使用enum类型,可读性更强:$table->enum('status', ['pending', 'progress', 'completed']);
修正后的完整迁移代码
public function up() { Schema::create('progress', function (Blueprint $table) { $table->id(); $table->foreignId('state_id')->constrained()->cascadeOnDelete(); $table->foreignId('city_id')->constrained()->cascadeOnDelete(); $table->text('address'); $table->string('project_name'); // 这里替换为你需要的写法 $table->tinyInteger('status')->length(2); $table->timestamps(); }); }
内容的提问来源于stack exchange,提问作者Mahmoud Khosravi
相关产品推荐
相关产品推荐

