将表迁移到 db 时出错...表已存在
Posted
技术标签:
【中文标题】将表迁移到 db 时出错...表已存在【英文标题】:Error while migrating tables into db...table already exists 【发布时间】:2019-10-07 21:27:24 【问题描述】:当我将我的表迁移到数据库时,它给出了这个错误
SQLSTATE[42S01]:基表或视图已存在:1050 表“用户” 已经存在 (SQL: create table
users
(id
int unsigned not null auto_increment 主键,body
longtext not null,url
varchar(255) null,user_id
int unsigned not null,commentable_id
int unsigned not null,commentable_type
varchar(191) not null,created_a t
timestamp null,updated_at
timestamp null) 默认 字符集 utf8mb4 collate utf8mb4_unicode_ci) 在 Connection.php 第 449 行: SQLSTATE[42S01]:基表或视图已存在:1050 表 “用户”已经存在
<?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()
if(!Schema::hasTable('users'))
Schema::create('users', function (Blueprint $table)
$table->increments('id');
$table-> string('name');
$table-> string('email')->unique();
$table-> string('password');
$table->rememberToken();
$table->timestamps();
);
Schema::table('users', function(Blueprint $table)
$table -> string('first_name') -> nullabel();
$table -> string('middle_name') -> nullabel();
$table -> string('last_name') -> nullabel();
$table -> string('city') -> nullabel();
$table -> integer('role') -> unsigned();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::dropIfExists('users');
我从数据库中删除了所有表然后我尝试了但给出了同样的错误
【问题讨论】:
试试这个代码:php artisan migrate:fresh
我做了但没有为我工作
请发布您的迁移,您是否定义了两次用户表?
检查您的.env
文件并查看数据库名称是否正确。
【参考方案1】:
尝试拆分为两个迁移或一次添加所有字段:
Schema::create('users', function (Blueprint $table)
$table->increments('id');
$table-> string('name');
$table-> string('email')->unique();
$table-> string('password');
$table->rememberToken();
$table->timestamps();
$table -> string('first_name') -> nullable();
$table -> string('middle_name') -> nullable();
$table -> string('last_name') -> nullable();
$table -> string('city') -> nullable();
$table -> integer('role') -> unsigned();
);
请注意:你也拼错了 nullable。
【讨论】:
它工作我使用user
创建表 cmets 表而不是 cmets=,现在它工作了,谢谢【参考方案2】:
可能您使用的是 Laravel 5.5,因此您必须在引导方法中不编辑 AppServiceProvider.php 文件的情况下制作 "php artisan migrate"。
所以我建议您使用 "php artisan tinker" 然后 "Schema::drop('users')(and exit with q)" 从数据库中删除您的表格强>。
之后您必须编辑您的 "AppServiceProvider.php" 文件,因此请使用此链接来帮助您:https://laravel-news.com/laravel-5-4-key-too-long-error
当您已经编辑了文件后,您现在可以进行 "php artisan migrate:rollback" 和之后的 "php artisan migrate"
对我有用!
【讨论】:
以上是关于将表迁移到 db 时出错...表已存在的主要内容,如果未能解决你的问题,请参考以下文章