そのため、データベース内のテーブルの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データベースです。
おそらく、変更しようとしている主キーを参照する外部キーを持つ別のテーブルがあります。
どのテーブルがエラーの原因であるかを調べるには、SHOW ENGINE INNODB STATUS
を実行し、LATEST FOREIGN KEY ERROR
セクションを確認します。
前に述べたように、FKを削除する必要があります。 Mysqlでは次のようにします。
ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
グーグルを介してこの質問に到達している人のために...このエラーは、外部キーとして機能しているフィールドの名前を変更しようとした場合にも発生する可能性があります。
PHPMyAdminまたはMySQLでこれをバイパスするには、まず属性の名前を変更する前に外部キー制約を削除します。
(PHPMyAdminユーザーの場合:PHPMyAdminでFK制約を削除するには、属性を選択してから、テーブル構造の下のツールバーの[ビューの印刷]の横にある[リレーションビュー]をクリックします)
外部キーである列を削除しようとしている場合、列名ではない正しい名前を見つける必要があります。例:サーバーテーブルの外部キーであるアラームテーブルのサーバーフィールドを削除しようとしている場合。
SHOW CREATE TABLE alarm;
_ CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)
行を探します。ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
_ALTER TABLE `alarm` DROP `server_id`
_これにより、Alarmsテーブルから外部キーサーバーが削除されます。
外部キーを追加しているときにこのエラーが発生した場合、子テーブルの値が親テーブルに存在しない可能性があります。
外部キーを追加する必要がある列のすべての値が0に設定されており、その値が参照しているテーブルで使用できないとしましょう。
親テーブルに存在する値を設定してから、外部キーを追加することができました。