web-dev-qa-db-ja.com

#1025-「./database/#sql-2e0f_1254ba7」の「./database/table」への名前変更時のエラー(errno:150)

そのため、データベース内のテーブルの1つに主キーを追加しようとしています。現在、次のような主キーがあります。

PRIMARY KEY (user_id, round_number)

User_idは外部キーです。

私はこれに変更しようとしています:

PRIMARY KEY (user_id, round_number, created_at)

これを行うには、phpmyadminで、テーブル構造ビューの主キーアイコンをクリックします。

これは私が得るエラーです:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

InnoDBテーブルエンジンを備えたMySQLデータベースです。

77
Richard Knop

おそらく、変更しようとしている主キーを参照する外部キーを持つ別のテーブルがあります。

どのテーブルがエラーの原因であるかを調べるには、SHOW ENGINE INNODB STATUSを実行し、LATEST FOREIGN KEY ERRORセクションを確認します。

133
Ike Walker

前に述べたように、FKを削除する必要があります。 Mysqlでは次のようにします。

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
32

グーグルを介してこの質問に到達している人のために...このエラーは、外部キーとして機能しているフィールドの名前を変更しようとした場合にも発生する可能性があります。

23
Dave C

PHPMyAdminまたはMySQLでこれをバイパスするには、まず属性の名前を変更する前に外部キー制約を削除します。

(PHPMyAdminユーザーの場合:PHPMyAdminでFK制約を削除するには、属性を選択してから、テーブル構造の下のツールバーの[ビューの印刷]の横にある[リレーションビュー]をクリックします)

13
LazerSharks

私はこの問題を抱えていました、それは外部キーのためです

_Relation View_(下の画像のように)をクリックしてから、削除するフィールドの名前を見つけ、Foreign key constraint (INNODB)列、選択を何もしないでください!外部キーを意味しません

enter image description here

それがうまくいくことを願っています!

4
M98

外部キーである列を削除しようとしている場合、列名ではない正しい名前を見つける必要があります。例:サーバーテーブルの外部キーであるアラームテーブルのサーバーフィールドを削除しようとしている場合。

  1. _SHOW CREATE TABLE alarm;_ CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)行を探します。
  2. _ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;_
  3. _ALTER TABLE `alarm` DROP `server_id`_

これにより、Alarmsテーブルから外部キーサーバーが削除されます。

4
Bonnie Varghese

外部キーを追加しているときにこのエラーが発生した場合、子テーブルの値が親テーブルに存在しない可能性があります。

外部キーを追加する必要がある列のすべての値が0に設定されており、その値が参照しているテーブルで使用できないとしましょう。

親テーブルに存在する値を設定してから、外部キーを追加することができました。

0
StateLess