質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

1回答

3083閲覧

マイグレーションファイルでMysqlの設定を変更しようとしてエラーが出てしまう

lkjgffh

総合スコア37

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/02/13 07:13

編集2018/02/13 09:01

前提・実現したいこと

laravelのmigrateファイルを使って、オートインクリメントオプションを付け忘れたカラムにオプションを追加したい
(外部制約のかかったテーブルのカラム変更)

発生している問題・エラーメッセージ

php artisan migrateで出るエラー

In Connection.php line 664: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error i n your SQL syntax; check the manual that corresponds to your MySQL server v ersion for the right syntax to use near 'AUTO_INCREMENT' at line 1 (SQL: al ter table テーブル名 modify column カラム名 INT(20) u nsigned primary AUTO_INCREMENT) In PDOConnection.php line 79: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error i n your SQL syntax; check the manual that corresponds to your MySQL server v ersion for the right syntax to use near 'AUTO_INCREMENT' at line 1 In PDOConnection.php line 77: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error i n your SQL syntax; check the manual that corresponds to your MySQL server v ersion for the right syntax to use near 'AUTO_INCREMENT' at line 1

該当のソースコード

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class ファイル名 extends Migration { public function up() { DB::statement('SET FOREIGN_KEY_CHECKS = 0'); DB::statement('alter table テーブル名 modify column カラム名 INT(20) unsigned primary AUTO_INCREMENT'); DB::statement('SET FOREIGN_KEY_CHECKS = 1'); } }

大元のマイグレーションファイルのID設定

$table->bigInteger('カラム名')->unsigned()->primary();

試したこと

直接Mysqlでコマンドを実行したらどうなるだろうと思い上記に書いたものをそのまま実行したところ
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AUTO_INCREMENT' at line 1
となりました。

Mysqlのリファレンスと、いくつか個人の方のサイトを見たのですが、自分のsqlのどこがどのように間違っているのか検討もつかず、また確かめ方も分かりませんでした。

意味無いだろうと思いつつ
CHANGE COLUMN もつかってみましたが同じエラーが出ました

補足情報(FW/ツールのバージョンなど)

laravel5.5
mysql 5.7.20-0ubuntu0.16.04.1

追記

このまま、続けていいものか分かりませんが・・・・。
プライマリーキーが構文エラーの元となっていましたので、下記コメントいただきましたように修正したところこちらのエラーは解消されました

ただその後下記のようなエラーが出てしまいました

17:22:58 alter table テーブル名 modify column カラム名 INT(20) unsigned primary key AUTO_INCREMENT Error Code: 1068. Multiple primary key defined 0.000 sec

こちらのエラーはすでにプライマリーキーがあるのに作ろうとしているエラーだと解釈しました。そのため、一度プライマリーキーを消してから実行しようと下記を追加しました

alter table テーブル名 DROP PRIMARY KEY;
そのようにしたところ下記のエラーが出現しました

17:32:50 alter table テーブル名 DROP PRIMARY KEY Error Code: 1025. Error on rename of './DB名/#sql-5eb_162' to './DB名/テーブル名' (errno: 150 - Foreign key constraint is incorrectly formed) 0.016 sec

そのため、キーを削除し
alter table テーブル名 DROP FOREIGN KEY キーの名前;

この後カラムを更新したところキーが作成されて無いというエラーが出たため下記のようにしました

17:27:12 alter table テーブル名 DROP PRIMARY KEY Error Code: 1025. Error on rename of './DB名/#sql-5eb_162' to './DB名/テーブル名' (errno: 150 - Foreign key constraint is incorrectly formed) 0.016 sec

alter table テーブル名 add foreign key (キー名) REFERENCES テーブル名(referencesとして結びついているID) on delete cascade on update cascade;

これだとForeign key constraint is incorrectly formedとなってしまうので外部キーの更新の仕方を調べていますが、現在は解決に至っていません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PRIMARY → PRIMARY KEYでは?

投稿2018/02/13 07:55

unz.hori

総合スコア1057

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lkjgffh

2018/02/13 08:28

おぉ、ありがとうございます。確かにこの部分のエラーは消えました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問