mysql alter table-インデックス +外部キーを追加するエラー1005
-
27-09-2019 - |
質問
このAlter Tableコマンドの何が問題になっていますか:
ALTER TABLE `lp`
ADD COLUMN `RuleId` INT(10) NOT NULL DEFAULT -111 AFTER `Weight` , ,
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD INDEX `fk_1` (`RuleId` ASC) ;
ラインを落とした場合
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...
その仕事、
私が得るエラーは次のとおりです。
Error Code : 1005
Can't create table '..' (errno: 121)
同じフィールドに外部キーとインデックスを追加するにはどうすればよいですか ?
アップデート:
2つのクエリを分離し、最初にインデックスを追加し、その後、外部キーを追加すると、インデックスが追加されましたが、2番目のクエリは機能しません!
外部キーの名前( 'fk_2')を変更して実行してみると、エラーが得られます:エラーコード:1452子の行を追加または更新できません:外部キーの制約が失敗する
解決
最初にインデックスを作成し、次に外部キーの制約を作成します。 MySQLは、外部キーを作成するためにインデックスが必要なため、最初にインデックスを作成する必要があります。別のステートメントも使用します。
他のヒント
私は正確に同じ問題を抱えていました。
私が見つけたのは、まったく同じ名前の別の外部キーが既に存在する場合、外部キーを追加できないということです。その他の外部キーが別のテーブルにある場合でも。
エラー1005(HY000):テーブルを作成できません './mydb/#sql-e4a_c715.frm'(errno:121)上記のように、名前の制約を追加しようとすると、このメッセージが表示されます。すでにどこかで使用されています。
(から取られた ここ)
だから、私が正しいかどうかを確認するためにランダムなものに名前を変更するだけです。
「manage.py sqlall」コマンドを使用して、n djangoアプリからスキーマDDLを組み合わせた後にこのエラーが発生しました。
MySQLのDDLには、ステートメントをグループ化する必要があることがわかりました。 親切 この順序で。具体的には、すべての変更テーブル...追加...外部キー... しなければならない 最後に発生すると、MySQLがそのエラーを上げます。
- テーブルを作成...
- インデックスを作成します...
- Table table_nameを変更する制約名外部キー...