kotaro-ktr
@kotaro-ktr (Kotaro Tanaka)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

MariaDBの構文で間違えている箇所がわかりません

前提の誤り

以下の内容がそもそも誤っておりました。

タイトル MySQLの構文で間違えている箇所がわかりません
     →MariaDBの構文で間違えている箇所がわかりません へ修正(2022.06.24)
タグ   SQL maridb10.4 laravel9 → Laravel mariadb へ修正(2022.06.24)

解決したいこと

以下の構文において構文内容にエラーが出ている旨のメッセージが表示されました。
以下の構文チェックサイトを参照してみましたが、VScode上のターミナルと同様の”この構文が違う”といった内容が表示されるのみでした。

https://jp.piliapp.com/mysql-syntax-check/(MySQL構文チェック様)
image.png

発生している問題・エラー

エラー1
 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TYPE VARCHAR(255)' at line 1 (SQL: ALTER TABLE m_codelist ALTER COLUMN codelist_id TYPE VARCHAR(255);)
エラー2
 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TYPE decimal(8,2)' at line 1 (SQL: ALTER TABLE t_adoption_record ALTER COLUMN page_cnt TYPE decimal(8,2);)
エラー3
  SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TYPE timestamp(0) without time zone' at line 1 (SQL: ALTER TABLE t_adoption_record ALTER COLUMN first_receipt_date TYPE timestamp(0) without time zone;)

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

エラー1のソースコード
<?php

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

class ChangeMCodelistTableColumnCodelistId extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('m_codelist', function (Blueprint $table) {
            //$table->string('codelist_id', 255)->change();
            DB::statement('ALTER TABLE m_codelist ALTER COLUMN codelist_id TYPE VARCHAR(255);');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('m_codelist', function (Blueprint $table) {
            //$table->string('codelist_id', 10)->change();
            DB::statement('ALTER TABLE m_codelist ALTER COLUMN codelist_id TYPE VARCHAR(10);');
        });
    }
}

エラー2のソースコード
<?php

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

class ChangeTAdoptionRecordTableColumnPageCnt extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('t_adoption_record', function (Blueprint $table) {
            //
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN page_cnt TYPE decimal(8,2);');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('t_adoption_record', function (Blueprint $table) {
            //
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN page_cnt TYPE integer;');
        });
    }
}

エラー3のソースコード
<?php

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

class ChangeArtistsTAdoptionRecordColumnChangetype extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('t_adoption_record', function (Blueprint $table) {
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN first_receipt_date TYPE timestamp(0) without time zone;');
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN final_decision_date TYPE timestamp(0) without time zone;');
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN date_final_disposition_set TYPE timestamp(0) without time zone;');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('t_adoption_record', function (Blueprint $table) {
            //
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN date_final_disposition_set TYPE date;');
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN final_decision_date TYPE date;');
            DB::statement('ALTER TABLE t_adoption_record ALTER COLUMN first_receipt_date TYPE date;');
        });
    }
}

いずれもALTERの書き方に指摘が出ておりました。

自分で試したこと

以下のサイトを参考に構文を調べてみましたが、基本的な構文はあっていそうでした。
https://www.projectgroup.info/tips/SQLServer/SQL/SQL000005.html

環境

image.png

0

3Answer

Comments

  1. @kotaro-ktr

    Questioner

    ありがとうございます。タイトルがMySQLでしたがMariaDBでした。
    1064(構文)のエラーはひとまずか解消されました。

参考サイトはSQLServerの構文で、MySQLと異なっているのだと思います。
MySQLであれば以下のような記述でうまくいかないでしょうか?

- ALTER TABLE m_codelist ALTER COLUMN codelist_id TYPE VARCHAR(255);
+ ALTER TABLE m_codelist MODIFY codelist_id VARCHAR(255);

追記
MySQLでもSQLServerでもなかったんですね…:joy:

1Like

Comments

  1. @kotaro-ktr

    Questioner

    ありがとうございます。タイトルがMySQLでしたがMariaDBでした。
    1064(構文)のエラーはひとまずか解消されました。

上記お二方のおかげもあり、構文のエラーは解消されました。
ただ、新たなエラーとして

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'codelist_id' in 't_adoption_record' (SQL: ALTER TABLE t_adoption_record MODIFY COLUMN codelist_id varchar(255);)

't_adoption_record'テーブルに'codelist_id'列がありませんという内容でした。
カラムを以下のファイルに追加してみましたが、同様のエラー内容が出てきました。

構文は間違っていないと思いましたので、マイグレートする際、マイグレーションファイル以外にカラムを参照するファイルがあるのかと思いましたが、あっていますでしょうか?

もしある際、どのファイルが参照されるのか知りたいです。

//'t_adoption_record'テーブルのマイグレーションファイル内コード

<?php

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

class CreateTAdoptionRecord extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('t_adoption_record', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
            $table->softDeletes();//論理削除
            $table->string('manuscript_number', 22)->comment('AAAA');
            $table->integer('article_type')->comment('BBB');
            $table->text('article_title')->comment('CCC');
            $table->integer('page_cnt')->nullable()->comment('DDD');
            $table->date('first_receipt_date')->comment('EEE');
            $table->string('corresponding_author_name', 512)->comment('FFF');
            $table->string('secondary_name_field', 512)->comment('MMM');
            $table->string('email_address', 512)->comment('JJJ');
            $table->date('final_decision_date')->nullable()->comment('LLLL');
            $table->integer('final_decision_term')->nullable()->comment('KKK');
            $table->date('date_final_disposition_set')->nullable()->comment('LL');
            $table->integer('final_disposition_term')->nullable()->comment('DDD');
            $table->string('codelist_id')->nullable();//←追加した'codelist_id'カラムです
        });
    }

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


抜粋
 $table->string('codelist_id')->nullable();//←追加した'codelist_id'カラムです
0Like

Comments

  1. @kotaro-ktr

    Questioner

    解決しました。
    初歩的なミスで、ロールバックせずにカラム追加していたことが原因でした。

    ①一度ロールバック php artisan rollback:migrate
    ②もう一度migrate php artisan migrate

    でできました。

Your answer might help someone💌