26

テーブルに外部キーを削除したいのですが、このエラー メッセージが表示されました

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>
4

5 に答える 5

34

ここで Chris White が説明した解決策は私にとってはうまくいきました。

根本的な問題は、MySQL がインデックスと外部キーの両方を作成することです。両方を削除する必要があります(クリスが言ったことに反して、最初に外部キー)。

  1. 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 |
    
  2. 外部キー制約を削除します。

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
    
  3. キーを削除する

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    

それは私のためにそれをしました。

于 2014-02-04T21:18:46.193 に答える
7

MySQL のエラー メッセージのバグのようです。( http://bugs.mysql.com/bug.php?id=10333 )

SHOW CREATE TABLE を使用して、外部キーの実際の名前table_nameを確認します。外部キー名のスペルが間違っているクエリを生成すると、mysql クエリ ブラウザの問題のようです。

于 2012-05-17T09:04:32.980 に答える
6

外部キーを削除しようとしているときにこのエラーが発生しないようにするには、外部キーの列名ではなく制約名を使用します。

私が試したとき

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);

あなたを助けるいくつかのリンク。

リンク 1

リンク 2 [2008 年 11 月 7 日午後 5 時 9 分に Alex Blume が投稿したものと、2011 年 1 月 21 日午前 4 時 57 分に Hector Delgadillo が投稿したものを探してください]

于 2012-05-17T09:34:36.990 に答える
1

外部キーを削除しようとしているときにこのエラーが発生しないようにするには、外部キーの列名ではなく制約名を使用します。

于 2012-05-17T09:02:54.930 に答える
0

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`

この種のエラーが発生した場合は、外部キー名を確認してください。

于 2017-03-07T05:20:29.900 に答える