Laravel 5迁移authors表时出现SQLSTATE[42S01]报错:users表已存在
搞定Laravel 5迁移时「Table 'users' already exists」的报错
嘿,我明白你现在的困惑——明明已经成功迁移了users表,结果跑authors表的迁移时,居然报错说users表已经存在!看错误信息就知道问题出在哪:执行create_authors_table迁移的过程中,系统居然在尝试创建users表,这明显是哪里串了,咱们一步步排查:
1. 先检查你的authors迁移文件代码
赶紧打开database\migrations\2018_01_22_091142_create_authors_table.php,看看里面的up()方法是不是写错了!大概率是你不小心把创建users表的代码粘到这个文件里了,比如把Schema::create('authors', ...)写成了Schema::create('users', ...)。
正常的authors表迁移代码应该是这样的:
public function up() { Schema::create('authors', function (Blueprint $table) { $table->increments('id'); $table->string('name'); // 这里加你需要的其他字段,比如email、bio之类的 $table->timestamps(); }); }
如果发现表名写错了,改成authors就解决一半问题了。
2. 确认迁移命令和迁移记录有没有问题
如果你确定authors的迁移文件没问题,那得看看是不是执行迁移的命令错了,或者Laravel的迁移记录乱了:
- 先看看哪些迁移已经执行过:
用Artisan命令查状态很方便:
确认php artisan migrate:status2018_01_20_085218_create_users_table已经标记为「Ran」。 - 如果你只想单独跑authors的迁移,一定要用指定文件的命令,避免误跑其他迁移:
要是你直接跑php artisan migrate --path=database/migrations/2018_01_22_091142_create_authors_table.phpphp artisan migrate,可能会触发所有未迁移的文件,但你说users已经迁移过了,所以这条主要是确保你没跑错命令。
3. 实在不行就重置迁移(仅限开发环境!)
如果前面两步都没解决,而且你确定users表的数据不重要(比如开发环境),可以重置所有迁移后重新执行:
警告:这个操作会删掉所有已迁移的表,千万不要在生产环境用!
# 重置所有迁移 php artisan migrate:reset # 重新执行所有迁移 php artisan migrate
要是你只想回滚最近一次迁移(比如不小心重复跑了users的迁移),可以用:
php artisan migrate:rollback --step=1
然后再单独跑authors的迁移就好。
内容的提问来源于stack exchange,提问作者Elvis Mawira
相关产品推荐
相关产品推荐

