23

列を持つテーブルCustomizationSetがあります:

customization_set_guid (which is a non-nullable guid and also the primary key)
creator_account_guid
and a few others

そして、既存のデータを含むテーブル列への登録:

registration_id (an int and the primary key)
customization_set_guid (also a guid (so a char(36)) which is nullable, and all entries are currently null)
and a few other columns

実行してみると

ALTER TABLE Registration ADD FOREIGN KEY 
    (
        customization_set_guid
    ) REFERENCES CustomizationSet (
        customization_set_guid
    );

MySQL Workbenchでは、エラー1050Table'。\dbname\registration'が既に存在します。

UIを使用して[テーブルの変更]ダイアログの[外部キー]タブで外部キーを追加しようとし、参照テーブルとしてCustomizationSetを選択すると、列のリストでcustomization_set_guidを選択できません。

この外部キーを追加できない理由がよくわかりません。追加したテーブル間に外部キーを正常に作成しました。登録テーブルはしばらくの間存在していました...

4

9 に答える 9

11

同じエラーが発生しましたが、それは外部キーが既に存在していたことが原因でした。必要なのは、制約を追加することだけです:

ALTER TABLE Registration 
  ADD CONSTRAINT idx_Registration_CustomizationSet 
  FOREIGN KEY (customization_set_guid) 
  REFERENCES CustomizationSet(customization_set_guid);
于 2011-10-24T08:22:13.077 に答える
2

ここにあるMySQLでこれに関するバグレポートがあるようです:

MySQL バグ 55296

結局、彼らはサーバーをアップグレードして問題を解決したと思います。それを読んでも、よくわかりません。制約名を入れる/変更するなどのいくつかの回避策がありました。これも同じだと思われる場合は、バグの再オープンをお願いします。

ある時点で、タイプが一致せず、workbench が間違ったエラー (errno 150 または errno 121 である必要があります) で応答していたと述べています。これらのエラーの原因は、 MySQL 外部キー エラーと Errno 150 で確認できます。

于 2012-06-15T18:09:05.977 に答える
2

そのため、チームメンバーはこれを理解しました。1 つのテーブルはタイプ utf8_general で設定され、別のテーブルはタイプ default に設定されました。デフォルトは utf8_general であるため、これが問題だとは思いませんでしたが、どうやら mysql は基になる型ではなく、型名だけを調べているようです。

于 2012-06-29T18:38:54.560 に答える
0

タイプミスかどうかはわかりませんが、そうすべきではありません

ALTER TABLE Registration ADD FOREIGN KEY 
(
    customization_set_guid
) REFERENCES CustomizationSet (
    customization_set_guid
);

のようなものになる

ALTER TABLE Registration ADD FOREIGN KEY 
customization_set_guid_fk (customization_set_guid) 
REFERENCES CustomizationSet (customization_set_guid);
于 2011-08-10T23:31:45.053 に答える
0

テーブルが既に存在するかどうかはわかりませんが、必要な列を選択できない理由は、おそらく列が同じタイプではないためです。両方が同じタイプ、同じ長さであり、すべて同じオプションを持っていることを確認してください。

于 2011-08-10T23:34:26.717 に答える