#1025-'。/ database /#sql-2e0f_1254ba7'の名前を './database/table'に変更するときにエラーが発生しました(errno:150)


81

そのため、データベース内のテーブルの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データベースです。


1
Googleを使用して簡単に検索すると、この問題は制約に関連していることがわかります。考えられる役立つリンク:dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.htmlおよびsimplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Lekensteyn 2010年

回答:


139

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

エラーの原因となったテーブルを見つけるには、実行SHOW ENGINE INNODB STATUSしてからLATEST FOREIGN KEY ERRORセクションを確認します。


2
私の場合、データベースは新しく作成され、テーブルはまったくありません。
GuilhermeFerreira18年

33

言われたように、あなたは前にFKを取り除く必要があります。Mysqlでは、次のようにします。

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

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

1
あなたの答えは本当に私を助けました。DROP FOREIGNKEYが問題を解決しました。ありがとう
Ram Babu S

1
これで私の問題も解決しましたが、同じスクリプトが私の開発用MySQLで機能していました。これはMySQLのバージョンで変更されたものですか?
Bancarel Valentin 2018

24

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


13

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

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


1
これが最も正確な答えだと思います
MontrealDevOne

4

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

  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

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

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

ここに画像の説明を入力してください

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


0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.