テーブルに外部キーを削除したいのですが、このエラーメッセージが表示されます
mysql> alter table customers drop foreign key customerid;
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152)
mysql>
外部キーを削除しようとしたときにこのエラーが発生しないようにするには、外部キーの列名ではなく制約名を使用します。
私が試したとき
mysql> ALTER TABLE mytable DROP PRIMARY KEY;
エラーが発生しました
ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150).
私はそれを使ってそれを解決しました:
mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3);
あなたを助けるいくつかのリンク。
リンク2 [2008年11月7日17:09にAlex Blumeが投稿&2011年1月21日4:57 amにHector Delgadilloが投稿を検索]
説明されている解決策 ここではChris White がうまくいきました。
根本的な問題は、MySQLがインデックスと外部キーの両方を作成することです。両方とも削除する必要があります(クリスが言ったことに最初に反する外部キー)。
show create table table_name;
SHOW CREATE TABLE `table_name`:
| table_name | CREATE TABLE `table_name` (
`id` int(20) unsigned NOT NULL auto_increment,
`key_column` smallint(5) unsigned default '1',
KEY `column_tablein_26440ee6` (`key_column`), <--- shows key name
CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name
`second_table` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
外部キー制約を削除します。
ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
キーを削除する
ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
それは私のためにそれをしました。
MySQLのエラーメッセージのバグのようです。 ( http://bugs.mysql.com/bug.php?id=103 )
SHOW CREATE TABLE table_name
を使用して、外部キーの実際の名前を確認します。外部キー名のスペルが間違っているクエリを生成するときに、mysqlクエリブラウザの問題である可能性があります。
外部キーを削除しようとしたときにこのエラーが発生しないようにするには、外部キーの列名ではなく制約名を使用します
Fahim Parkarが提案したように、外部キーの名前で試してください。実際、それも常に機能するとは限りません。
私の場合、私は
FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`)
作成によってfkを追加するコード。
このコードの問題は無効であり、何らかの構文エラーをスローするはずですが、ランダムな名前の外部キーが追加されています。
正しい構文でfkを追加した場合:
CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`)
次のコードはそれを適切に落としました:
ALTER TABLE `table1` DROP FOREIGN KEY `fk`
したがって、無効な名前の外部キーを削除しようとした場合にも、この種のエラーが発生する可能性があります。でテーブルのプロパティを表示することが重要です
SHOW CREATE TABLE `table1`
この種のエラーが発生した場合は、外部キー名を確認してください。