前提・実現したいこと
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となってしまうので外部キーの更新の仕方を調べていますが、現在は解決に至っていません

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/13 08:28