将表迁移到 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 ttimestamp null, updated_attimestamp null) 默认 字符集 utf8mb4 collat​​e 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 时出错...表已存在的主要内容,如果未能解决你的问题,请参考以下文章

迁移 DB Rails 时出错

更新 DynamoDB 表时出错:表已启用流

将表定义上传到 phpmyadmin 时出错

将表插入到我使用 sqlite 在 python 中创建的数据库中时出错

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

从 EF Core 5 迁移到 EF Core 6 时出错