PHP artisan migrate命令给出错误?

时间:2017-03-08 16:42:54

标签: php mysql laravel

当我运行命令php artisan migrate时,会导致以下错误

  

[Illuminate \ Database \ QueryException] SQLSTATE [42S01]:基表或   视图已存在:1050表'用户'已存在(SQL:create   table usersid int unsigned not null auto_increment primary key,   name varchar(255)not null,email varchar(255)not null,   password varchar(255)not null,remember_token varchar(100)null,   created_at timestamp null,updated_at timestamp null)默认值   字符集utf8mb4 collat​​e utf8mb4_unicode_ci)

[PDOException] SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists

我在Windows上使用Laravel 5.4。

6 个答案:

答案 0 :(得分:2)

让你知道'用户'表已经存在 - 当你正在运行你的迁移时 - 它正在尝试创建它(但它已经存在)

这通常是因为您之前尝试过运行'php artisan migrate'命令。必须回滚以使这些更改“撤消”,或者清除DB表。

你可以运行:

php artisan migrate:rollback 

那应该摆脱所有表 - 然后你可以运行

php artisan migrate

它应该适当地加载所有内容。

替代方法?登录到您的数据库并从数据库中物理删除这些表。然后,您可以再次运行迁移,它将起作用。

一点点问题: 首先检查您的迁移:它应该具有此功能:

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('users');
}

如果没有,回滚将不会删除用户表,您仍然会遇到此问题(这意味着您必须登录数据库并手动删除表)。

如果使用此命令创建迁移,则会自动包含回滚功能:

php artisan make:migration create_yourtablename_table

答案 1 :(得分:1)

按照以下步骤进行migrate

检查您的数据库 如果有'用户'表退出然后DROP用户table

  

现在

第1步。要创建迁移,请使用make:migration 命令: - php artisan make:migration create_yourtablename_table

第2步。输入此命令:php artisan migrate

答案 2 :(得分:1)

我遇到了同样的问题,我所做的是在用户和密码恢复迁移中的(向上功能)中注释掉行,然后我尝试了它。我不知道这是否是正确的方法!如果我错了,请纠正我

答案 3 :(得分:1)

来自https://github.com/laravel/framework/issues/21100的答案。

您的问题可以解决 通过更改create_users_table.php

<?php

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

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //Add this line
        Schema::dropIfExists('users');
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

答案 4 :(得分:0)

如果您在该问题中粘贴了确切的代码,那么我可以看到一个简单的拼写错误

email varchar(255) not n ull,

我知道我给出的愚蠢回答。 但你可以使用:

php artisan migrate --force
php artisan migrate:refresh
php artisan migrate:reset

更好地使用它。可能它会起作用:

php artisan migrate:rollback

答案 5 :(得分:0)

使用

php artisan migrate:rollback