私はこれを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)
何か案は?外部キーのもの?
私はこれを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)
何か案は?外部キーのもの?
回答:
テーブルがInnoDBエンジンを使用している場合、通常このエラーが発生します。その場合は、外部キーを削除してから、テーブルを変更して列を削除する必要があります。
しかし、トリッキーな部分は、列名を使用して外部キーを削除できないことです。その代わりに、インデックスの作成に使用される名前を見つける必要があります。それを見つけるには、次の選択を発行します。
SHOW CREATE TABLE領域;
これにより、次のようなインデックスの名前が表示されます。
制約の
region_ibfk_1
外部キー(country_id
)参照country
(id
)削除のアクションなし更新のアクションなし
今単に発行します:
テーブル領域の変更、外部キーの削除
region_ibfk_1
。
そして最後に:
表領域のドロップ列country_idを変更します。
そして、あなたは行ってもいいです!
これは確かに外部キーエラーです。perrorを使用して確認できます。
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
何が失敗したかについての詳細を見つけるSHOW ENGINE INNODB STATUS
には、何が問題かについての詳細が含まれている「最新の外部キーエラー」セクションを使用して探すことができます。
あなたのケースでは、何かがcountry_id列を参照している可能性が高いです。
存在しない外部キーを削除しようとすると、このエラーが発生することもあります。したがって、外部キーを削除するときは、それらが実際に存在することを常に確認してください。
外部キーが存在し、それでもこのエラーが発生する場合は、以下を試してください。
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
//ここに外部キーをドロップします!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
これは常に私にとってはトリックです:)
私は知っています、これは古い投稿ですが、エラー1025を探している場合、それはみんなのお気に入りの検索エンジンへの最初のヒットです。
ただし、この問題を修正するための簡単な「ハック」があります。
コマンドを実行する前に、次のコマンドを使用して外部キー制約チェックを無効にする必要があります。
SET FOREIGN_KEY_CHECKS = 0;
その後、コマンドを実行できます。
完了したら、次のコマンドを使用して、外部キー制約チェックを再度有効にすることを忘れないでください。
SET FOREIGN_KEY_CHECKS = 1;
頑張って頑張ってください。
mysqlデータベースのエラーファイルを確認します。バグ#26305によると、私のSQLは原因を示していません。このバグはMySQL 4.1以降に存在します;-)
おそらく、変更しようとしている主キーを参照する外部キーを持つ別のテーブルが存在します。
エラーの原因となったテーブルを特定するには、実行SHOW ENGINE INNODB
STATUS
してからLATEST FOREIGN KEY ERROR
セクションをます
SHOW CREATE TABLEカテゴリを使用して、制約の名前を表示します。
ほとんどの場合、categorys_ibfk_1になります。
名前を使用して最初に外部キーを削除し、次に列を削除します。
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
私の場合、MySQLワークベンチを使用していて、テーブルに列の1つをドロップするときに同じ問題に直面しました。外部キーの名前が見つかりませんでした。次の手順に従って問題を解決しました。
Rt。スキーマをクリックし、「スキーマインスペクター」を選択します。これにより、さまざまなテーブル、列、インデックスなどが得られます。
「インデックス」という名前のタブに移動し、「列」という名前の列の下の列の名前を検索します。見つかったら、「Table」という列名の下でこのレコードのテーブル名を確認します。必要なテーブルの名前と一致する場合は、「名前」という列の外部キーの名前を書き留めます。
次にクエリを実行します。ALTER table tableNamexx DROP KEY foreignKeyName;
これで、正常に実行されるはずのdropステートメントを実行できます。
MySQL 5.6でこのエラーが発生しましたが、外部キーとは関係がありませんでした。これは、小さなLAN上のサーバーとして機能するWindows 7 Professionalマシン上にありました。
クライアントアプリケーションは、テーブルを作成するバッチ操作を実行し、テーブルにいくつかの外部データを入力してから、永続的なテーブルと結合するクエリを実行し、「一時的な」テーブルを削除しました。このバッチはこれを約300回実行し、この特定のルーチンは、バッチ内のランダムなポイントで突然エラー1025 Unname to rename問題が発生したときに、数週間にわたって毎週実行されていました。
私の場合、アプリケーションは4つのDDLステートメント、3つのCREATE INDEXに続くCREATE TABLEを使用しており、外部キーはありません。ただし、失敗した時点で実際に作成されるのは2つのインデックスだけで、実際のテーブルの.frmファイルの名前が変更されました。
私の解決策は、個別のCREATE INDEXステートメントを削除し、CREATE TABLEステートメントを使用して作成することでした。これを書いている時点で、これは私と私の誰かの問題を解決し、誰かがこのスレッドを見つけたときに頭を掻きました。
averageRatings = FOREACH groupedRatings GENERATE group AS movieID、AVG(ratings.rating)AS avgRating、COUNT(ratings.rating)AS numRatings;
上記のようなコマンドを使用している場合は、グループを小文字で使用する必要があります。これは私の問題を解決するかもしれません。少なくともPIGスクリプトでは。