mysqlの外部キーエラーはテーブルステートメントを作成します(err:150)

StackOverflow https://stackoverflow.com/questions/5357936

質問

作成テーブルステートメントの非常にシンプルなペアで、可能な限りすべてを試したと感じています。

タイプの一致、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)

貧弱な変数名について申し訳ありません。

役に立ちましたか?

解決

あなたはフィールドを参照するのではなく、テーブルだけであり、それは間違っています。

...
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

他のヒント

参照列の名前を明示的に提供する必要があります。

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)
        );

外部キー宣言を書き換えて、キーを作成するfoo_entの列を明示的にリストすることを検討してください。

テーブルcat_ent(some_item integer、yyy_no varchar(80)、apple decimal(6,2)、primary key(some_item)、foriest key(yyy_no)参照foo_ent(yyy_no))engine = innodb;

私のために働きます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top