迁移数据库(Laravel)时出错:表已存在

Posted

技术标签:

【中文标题】迁移数据库(Laravel)时出错:表已存在【英文标题】:Error while migrating database (Laravel): table already exists 【发布时间】:2019-05-30 02:55:51 【问题描述】:

我已经安装了 Laravel 的 auth 和 chatter 论坛包。当我尝试迁移数据库时,我得到了这个错误:

迁移:2014_10_12_000000_create_users_table Illuminate\Database\QueryException:SQLSTATE[42S01]:基表或视图已经存在:1050 表“用户”已存在(SQL:创建表“用户”(“id” int unsigned not null auto_increment 主键,“name” varchar (255) not null, `email` varchar(255) not null, `email_verified_at` timestamp null, `password` varchar(255) not null, `remember_token` varchar(100) null, `created_at` timestamp null, `updated_at ` timestamp null) 默认字符集 utf8mb4 collat​​e 'utf8mb 4_unicode_ci') 在 C:\xampp\htdocs\Application\vendor\laravel\framework\src\Illuminate\Databas e\Connection.php:664 660| // 如果尝试运行查询时发生异常,我们将格式化错误 661| // 包含与 SQL 的绑定的消息,这将使异常 a 662| // 对开发人员更有帮助,而不仅仅是数据库的错误。 663|捕获(异常 $e) 664|抛出新的查询异常( 665| $query, $this->prepareBindings($bindings), $e 666| ); 667| 668| 异常跟踪: 1 PDOException::("SQLSTATE[42S01]: 基表或视图已经存在:1050 表'用户'已经存在") C:\xampp\htdocs\Application\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458 2 PDOStatement::execute() C:\xampp\htdocs\Application\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458 请使用参数 -v 查看更多详细信息。

我尝试使用命令迁移:

php artisan migrate

【问题讨论】:

由于用户已经存在,找到该文件并在 Up 函数中注释掉所有内容。这将允许在不删除文件的情况下继续迁移。 【参考方案1】:

我相信这会起作用,因为我有同样的问题,但我已经解决了这个问题

 php artisan migrate:fresh

请尝试检查

更新

删除项目并安装新的laravel项目

并在您的 .env 文件中进行更改和

在database.php中

 'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => 'InnoDB',
    ],

将您现有的代码替换为此

然后运行

 php artisan make:auth 

 php artisan migrate

  php artisan migrate:fresh

希望这次能成功

并确保您的系统中安装了所有要求 https://laravel.com/docs/5.7/installation

【讨论】:

【参考方案2】:

migrate:refresh 命令将回滚所有迁移,然后执行 migrate 命令。此命令有效地重新创建您的整个数据库:

php artisan migrate:refresh

// Refresh the database and run all database seeds...
php artisan migrate:refresh --seed

另一个解决方案是:从数据库中删除 users table 表,同时从 migrations 表中删除用户条目。

之后,执行 migrate Artisan 命令:php artisan migrate

【讨论】:

【参考方案3】:

好吧,我总是安装 laravel 我得到同样的错误。尝试像这样更改迁移文件中的代码:

public function up()

    Schema::create('users', function (Blueprint $table) 
        $table->increments('id');
        $table->string('name');
        $table->string('email',64ADD THIS PARAMETER)->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    );

您必须向唯一的字符串(最大长度)或键(如电子邮件)添加第二个参数。 不要忘记清除数据库中的表,以便在运行 php artisan migrate 时清除数据库。

【讨论】:

【参考方案4】:

如果您检查错误跟踪,它几乎在底部显示:

基表或视图已存在:1050 表“用户”已存在 存在”) C:\xampp\htdocs\Application\vendor\laravel\framework\src\Illuminate\Databa se\Connection.php:458

这意味着users 表已经存在,因此当您运行迁移时,它会尝试创建已在数据库中创建的表,因此会出现错误。

因此,在再次运行之前撤消此迁移,您可以这样做:

php artisan migrate:refresh

查看有关rolling back migrations的文档。

这将在实际运行up() 之前运行系统中已迁移的每个迁移文件的down() 函数。

如果你去你的users迁移,你可以看到down()函数,它应该是这样的:

数据库/迁移/XXXX_XX_XX_XXXXXX_create_users_table.php

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()

    Schema::dropIfExists('users');

每当您创建迁移时,请始终实现 down() 方法,以利用回滚选项。

【讨论】:

Migrate:refresh 显示相同的错误。当我尝试回滚迁移时显示“没有什么可以回滚”。向下功能看起来是这样的。 如果您转到migrations 表(记录已运行迁移的表),它会列出用户表的迁移吗?如果没有,您需要手动删除users 表(直接在您的数据库中) 迁移表为空。试图删除用户表,但没有! 如果您已经删除了users 表,则不应该有任何错误(因为不应该有任何冲突)。你确定你使用的是你正在配置的同一个数据库连接吗?

以上是关于迁移数据库(Laravel)时出错:表已存在的主要内容,如果未能解决你的问题,请参考以下文章

django数据库的表已迁移的不能重新迁移的解决办法

尝试迁移Laravel数据库时出错

在laravel中使用外键迁移时出错

带有 Sqlite 错误的 Laravel 迁移:typeSet 不存在

Laravel 5.4 迁移错误 [42501]

laravel 数据库迁移