首页 > 解决方案 > 迁移数据库时出错(Laravel):表已存在

问题描述

我已经安装了 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

标签: phpmysqllaravel

解决方案


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

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

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

因此,在再次运行之前撤消此迁移,您可以执行以下操作:

php artisan migrate:refresh

检查有关回滚迁移的文档。

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

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

数据库/迁移/XXXX_XX_XX_XXXXXX_create_users_table.php

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

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


推荐阅读