Home > front end >  Laravel Migration Error: SQLSTATE[42000]: Syntax error or access violation: 1091 with mysql
Laravel Migration Error: SQLSTATE[42000]: Syntax error or access violation: 1091 with mysql

Time:07-21

I am learning migration in Laravel. I have created a migration file and migrations seems to work fine from command line. But inside my mysql file the username column is not created after migration.

>php artisan make:migration add_username_to_users_table
 Created Migration: 2022_07_15_123530_add_username_to_users_table
>php artisan migrate 
 Migrating: 2022_07_15_123530_add_username_to_users_table 
 Migrated:  2022_07_15_123530_add_username_to_users_table (31.34ms)

Migration file:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('username');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('username');
        });
    }
};

users table in mysql database: No username column created

MariaDB [julai_pro]> describe users;
 ------------------- --------------------- ------ ----- --------- ---------------- 
| Field             | Type                | Null | Key | Default | Extra          |
 ------------------- --------------------- ------ ----- --------- ---------------- 
| id                | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name              | varchar(255)        | NO   |     | NULL    |                |
| email             | varchar(255)        | NO   | UNI | NULL    |                |
| email_verified_at | timestamp           | YES  |     | NULL    |                |
| password          | varchar(255)        | NO   |     | NULL    |                |
| remember_token    | varchar(100)        | YES  |     | NULL    |                |
| created_at        | timestamp           | YES  |     | NULL    |                |
| updated_at        | timestamp           | YES  |     | NULL    |                |
 ------------------- --------------------- ------ ----- --------- ---------------- 
8 rows in set (1.265 sec)

And when refresh my migration it gives me the below error

>php artisan migrate:refresh 
 Rolling back: 2022_07_15_123530_add_username_to_users_table

   Illuminate\Database\QueryException

  SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP COLUMN `username`; check that it exists (SQL: alter table `users` drop `username`)

 
-app\vendor\laravel\framework\src\Illuminate\Database\Connection.php:759
    755▕         // If an exception occurs when attempting to run a query, we'll format the error
    756▕         // message to include the bindings with SQL, which will make this exception a
    757▕         // lot more helpful to the developer instead of just the database's errors.
    758▕         catch (Exception $e) {   ➜ 759▕             throw new QueryException(
    760▕                 $query, $this->prepareBindings($bindings), $e
    761▕             );
    762▕         }
    763▕     }

  1  
-app\vendor\laravel\framework\src\Illuminate\Database\Connection.php:544
      PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP COLUMN `username`; check that it exists")

  2  
-app\vendor\laravel\framework\src\Illuminate\Database\Connection.php:544
      PDOStatement::execute()

>php artisan migrate 
 Nothing to migrate.

Option1 : I tried to solve this with the below command with success.

>php artisan cache:clear
Application cache cleared successfully.

>php artisan config:cache
Configuration cache cleared successfully.
Configuration cached successfully.

Option 2 : I also tried the option from @Udhav Sarvaiya

Open your app/Providers/AppServiceProvider.php file and inside the boot() method set a default string length:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

None of the options solved the problem the username Column is not created in users table. Kindly assist.

Edit: the migration table in database

MariaDB [julai_pro]> select * from migrations;
 ---- ------------------------------------------------------- ------- 
| id | migration                                             | batch |
 ---- ------------------------------------------------------- ------- 
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
|  5 | 2022_07_15_123530_add_username_to_users_table         |     2 |
 ---- ------------------------------------------------------- ------- 
5 rows in set (0.056 sec)

CodePudding user response:

php artisan migrate:refresh first rolls back all your migrations then runs it again you would want to do php artisan migrate to add a migration and php artisan migrate:fresh if you would like it to wipe the database first

> php artisan migrate
Nothing to migrate.

you can look in the migrations table to see which migrations ran

  • Related