SQLSTATE [42S01]:基表或视图已存在或基表或视图已存在:1050表

时间:2017-05-23 17:33:08

标签: php laravel-5.4

这是我的迁移表

    <?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUserTable extends Migration
{

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('role_id')->unsigned();
            $table->string('name');
            $table->string('email',50)->unique();
            $table->string('username');
            $table->string('password');
            $table->boolean('active');
            $table->rememberToken();
            $table->timestamps();

        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

当我尝试迁移时发生以下错误

* [照亮\数据库\ QueryException] SQLSTATE [42S01]:基表或视图已存在:1050表'用户'alre ady exists(SQL:create table usersid int unsigned not null auto_incr ement主键,role_id int unsigned not null,name varchar(191)not  null,email varchar(50)not null,username varchar(191)not null,pas sword varchar(191)not null,active tinyint(1)not null, remember_token varchar(100)null,created_at timestamp null,updated_at timestamp nu ll)默认字符集utf8mb4 collat​​e utf8mb4_unicode_ci)

[PDOException] SQLSTATE [42S01]:基表或视图已存在:1050表'用户'alre ady存在*

请告诉我该怎么办?我已经使用了migrate:reset或dumpautoload或rollback没有发生任何事情。很多时候我编辑或删除这个用户文件并重新创建它。

3 个答案:

答案 0 :(得分:4)

试试这个

   <?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUserTable extends Migration
{

    public function up()
    {
        Schema::dropIfExists('users');
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('role_id')->unsigned();
            $table->string('name');
            $table->string('email',50)->unique();
            $table->string('username');
            $table->string('password');
            $table->boolean('active');
            $table->rememberToken();
            $table->timestamps();

        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

答案 1 :(得分:1)

当您要迁移数据库中存在的表时,将显示此问题: 对于这个问题,只需手动转到PHPMYADMIN并删除所有表,现在 运行命令php artisan migration

答案 2 :(得分:0)

危险 -通过删除表,回滚或刷新数据库将破坏该表或数据库中的所有数据,因此不建议将这些方法用于生产中绝对不应在迁移中包含删除表行为。

很明显,有很多针对此问题的“解决方案”,但是我阅读的所有解决方案都是非常具有破坏性的解决方案,并且都不适用于生产数据库。是的,他们摆脱了错误,但是付出了什么代价?

根据解决方案的数量,似乎也可能有多种原因导致此错误。

我的错误是由我的迁移表中的条目缺失引起的。这需要一个非常简单的解决方案-重新添加条目。像这样的简单问题绝对不能保证数据库刷新