mysqlの外部キーエラーはテーブルステートメントを作成します(err:150)
-
27-10-2019 - |
質問
作成テーブルステートメントの非常にシンプルなペアで、可能な限りすべてを試したと感じています。
タイプの一致、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;
私のために働きます。
所属していません StackOverflow