2

非常に単純なcreatetableステートメントのペアで可能な限りすべてを試したと思います。

タイプが一致し、ENGINE = InnoDBなどを使用してみましたが、外部キーエラーが発生する理由に困惑しています。

私はしばらくの間SQLを離れていたので、これはおそらく簡単なことです。

mysql> CREATE TABLE foo_ent(yyy_no VARCHAR(80),
    -> zoo VARCHAR(80),
    -> PRIMARY KEY (yyy_no));
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE cat_ent(some_item INTEGER,
    -> yyy_no VARCHAR(80),
    -> apple DECIMAL(6,2),
    -> PRIMARY KEY (some_item),
    -> FOREIGN KEY (yyy_no) REFERENCES foo_ent);
ERROR 1005 (HY000): Can't create table 'test.cat_ent' (errno: 15
0)

貧弱な変数名について申し訳ありませんが、会社のものを上書きしても安全です。

4

3 に答える 3

2

フィールドを参照せず、テーブルのみを参照していますが、これは正しくありません。

...
foreign key (yyy_no) references foo_ent(yyy_no)

また、エラー番号によると、MySQL のドキュメントにも記載されています。

削除されたテーブルを再作成する場合は、それを参照する外部キー制約に準拠する定義が必要です。前述のように、正しい列名と型が必要であり、参照されるキーにインデックスが必要です。これらが満たされていない場合、MySQL はエラー番号 1005 を返し、エラー メッセージでエラー 150 を参照します。

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

于 2011-03-18T21:26:33.807 に答える
0

参照される列の名前を明示的に指定する必要があります。

CREATE TABLE cat_ent
        (
        some_item INTEGER NOT NULL,
        yyy_non VARCHAR(80),
        apple DECIMAL(6,2),
        PRIMARY KEY (some_item),
        FOREIGN KEY (yyy_non) REFERENCES foo_ent(yyy_no)
        );
于 2011-03-18T21:29:40.843 に答える
0

FOREIGN KEY 宣言を書き直して、キーをオンにしたい foo_ent 内の列を明示的にリストすることを検討してください。

CREATE TABLE cat_ent(some_item INTEGER, yyy_no VARCHAR(80), apple DECIMAL(6,2), PRIMARY KEY (some_item), FOREIGN KEY (yyy_no) REFERENCES foo_ent(yyy_no)) ENGINE=InnoDB;

私のために働きます。

于 2011-03-18T21:47:21.670 に答える