163

私はmysqlでこれを試しました:

mysql> alter table region drop column country_id;

そして、これを得ました:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

何か案は?外部キーのもの?

4

14 に答える 14

242

テーブルが InnoDB エンジンを使用している場合、通常、このエラーが発生します。その場合、外部キーを削除してから、テーブルの変更を行って列を削除する必要があります。

しかし、難しいのは、列名を使用して外部キーを削除することはできず、代わりにインデックスに使用される名前を見つける必要があることです。それを見つけるには、次の select を発行します。

SHOW CREATE TABLE 領域を表示します。

これにより、次のようなインデックスの名前が表示されます。

制約region_ibfk_1FOREIGN KEY ( country_id) REFERENCES country( id) ON DELETE NO ACTION ON UPDATE NO ACTION

次に、次を発行します。

テーブル領域ドロップ外部キーを変更します region_ibfk_1

そして最後に:

テーブル リージョン ドロップ列 country_id を変更します。

そして、あなたは行ってもいいです!

于 2011-04-11T00:45:46.720 に答える
173

これは確かに外部キー エラーです。perror を使用して確認できます。

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

何が失敗したかについての詳細をSHOW ENGINE INNODB STATUS調べるには、問題の詳細が含まれている LATEST FOREIGN KEY ERROR セクションを使用して探すことができます。

あなたの場合、country_id 列を参照している可能性が最も高い原因です。

于 2008-10-07T17:24:10.183 に答える
7

drop ステートメントで「FOREIGN KEY」の代わりに「KEY」を使用して、alter table クエリを実行するだけです。問題の解決に役立ち、外部キー制約が削除され、テーブルの列を変更してテーブルを削除できることを願っています。

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

の代わりDROP KEYDROP FOREIGN KEY

それが役立つことを願っています。

ありがとう

于 2013-02-21T08:05:32.503 に答える
3

ご存知のとおり、これは古い投稿ですが、エラー 1025 を探しているなら、これがみんなのお気に入りの検索エンジンで最初にヒットしたものです。

ただし、この問題を解決するための簡単な「ハック」があります。

コマンドを実行する前に、まず次のコマンドを使用して外部キー制約チェックを無効にする必要があります。

SET FOREIGN_KEY_CHECKS = 0;

その後、コマンドを実行できます。

完了したら、次のコマンドを使用して、外部キー制約チェックを再度有効にすることを忘れないでください。

SET FOREIGN_KEY_CHECKS = 1;

あなたの努力に幸運を。

于 2017-01-09T08:25:49.983 に答える
2

私はかつて同様の問題を抱えていました。テーブル A から主キーを削除しましたが、テーブル BI から外部キー列を削除しようとすると、上記と同じエラーが表示されました。

列名を使用して外部キーを削除することはできません。PHPMyAdmin または MySQL でこれをバイパスするには、属性の名前を変更または削除する前に、まず外部キー制約を削除してください。

于 2016-01-12T05:40:40.143 に答える
1

mysql データベースのエラー ファイルを確認してください。バグ #26305によると、私の sql は原因を教えてくれません。このバグは MySQL 4.1 から存在します ;-)

于 2010-03-16T16:39:32.613 に答える
1

MySQL Workbench などのクライアントを使用している場合は、外部キーを削除する目的のテーブルを右クリックし、外部キー タブを選択してインデックスを削除します。

次に、次のようにクエリを実行できます。

alter table table_name drop foreign_key_col_name;
于 2013-01-08T20:25:24.310 に答える
1

変更しようとしている主キーを参照する外部キーを持つ別のテーブルがある可能性があります。

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

SHOW CREATE TABLE カテゴリを使用して、制約の名前を表示します。

おそらくそれは、categories_ibfk_1 になるでしょう。

名前を使用して最初に外部キーをドロップし、次に列をドロップします。

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
于 2016-01-11T13:24:13.153 に答える
0

私の場合、MySQL ワークベンチを使用していましたが、テーブルに列の 1 つをドロップしているときに同じ問題に直面しました。外部キーの名前が見つかりませんでした。問題を解決するために、次の手順に従いました。

  1. Rt。スキーマをクリックして、「スキーマ インスペクタ」を選択します。これにより、さまざまなテーブル、列、インデックスなどが提供されます。

  2. 「インデックス」という名前のタブに移動し、「列」という名前の列の下にある列の名前を検索します。見つかったら、列名「テーブル」の下にあるこのレコードのテーブルの名前を確認します。必要なテーブルの名前と一致する場合は、「名前」という名前の列から外部キーの名前を書き留めます。

  3. 次にクエリを実行します: ALTER table tableNamexx DROP KEY foreignKeyName;

  4. これで、正常に実行される drop ステートメントを実行できます。

于 2016-02-25T07:51:34.100 に答える
0

外部キー制約の問題だと思います。country_id は別のテーブルで外部キーとして使用されていますか?

私はDBの第一人者ではありませんが、fkを削除し、alter tableを実行してからfkをやり直すことで、このような問題(fk制約があった場合)を解決したと思います。

私は結果がどうなるかを聞くことに興味があります.mysqlはかなり不可解です.

于 2008-10-01T23:42:07.400 に答える