2

このテーブル変更コマンドの何が問題になっていますか:

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)

同じフィールドに FOREIGN KEY と INDEX を追加するにはどうすればよいですか?

アップデート:

最初にINDEXを追加し、その後FOREIGN KEYを追加すると、インデックスが追加されましたが、2番目のクエリが機能しません!

外部キーの名前 (「fk_2」など) を変更して実行しようとすると、エラーが発生します: エラー コード: 1452 子行を追加または更新できません: 外部キー制約が失敗します

4

3 に答える 3

5

最初にインデックスを作成し、次に外部キー制約を作成します。MySQLには外部キーを作成するためのインデックスが必要です。そのため、最初にインデックスを作成する必要があります。別のステートメントも使用してください。

于 2010-08-11T06:32:02.393 に答える
1

私はまったく同じ問題を抱えていました。

私が見つけたのは、データベースにまったく同じ名前の別の外部キーが既に存在する場合、外部キーを追加できないということです。その他の外部キーが別のテーブルにある場合でも。

ERROR 1005 (HY000): Can't create table './MyDB/#sql-e4a_c715.frm' (errno: 121) 上記のように、次のような名前の制約を追加しようとすると、このメッセージが表示されます。すでに別の場所で使用されています。

(ここから撮影)

だから、私が正しいかどうかを確認するために、名前をランダムなものに変更してください..

于 2011-02-24T21:03:14.170 に答える
0

「manage.py sqlall」コマンドを使用して N Django アプリのスキーマ DDL を結合した後に、このエラーが発生しました。

MySQL の DDL では、ステートメントをこの順序で種類別にグループ化する必要があることがわかりました。具体的には、すべての ALTER TABLE ... ADD ... FOREIGN KEY ...が最後に発生する必要があります。そうしないと、MySQL でそのエラーが発生します。

  1. テーブルを作成...
  2. インデックスを作成...
  3. ALTER TABLE table_name ADD CONSTRAINT name FOREIGN KEY ...
于 2014-03-06T18:25:44.033 に答える