迁移数据库(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 collate '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)时出错:表已存在的主要内容,如果未能解决你的问题,请参考以下文章