MySQL CREATE TABLE 语句上的外键错误(错误:150)

发布于 2024-10-22 19:11:17 字数 604 浏览 2 评论 0原文

我觉得我已经在一对非常简单的创建表语句上尝试了一切可能的方法。

类型匹配,我尝试使用 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)

对糟糕的变量名称感到抱歉,可以安全地覆盖公司内容。

I feel I've tried everything possible on a very simple pair of create table statements.

The types match, I tried using ENGINE = InnoDB, etc and am stumped why I'm getting the foreign key error.

I've been away from SQL for some time, so this is probably an easy one.

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)

Sorry about the poor variable names, safe to over-write company stuff.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

听闻余生 2024-10-29 19:11:17

您没有引用字段,只引用了表,这是不正确的。

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

You don't reference to a field, only a table, which is incorrect.

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

And according to your error number, the MySQL documentation also states;

If you re-create a table that was
dropped, it must have a definition
that conforms to the foreign key
constraints referencing it. It must
have the right column names and types,
and it must have indexes on the
referenced keys, as stated earlier. If
these are not satisfied, MySQL returns
error number 1005 and refers to error
150 in the error message.

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

蓝天 2024-10-29 19:11:17

您应该明确提供引用列的名称:

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

You should provide the name of the referenced column explicitly:

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)
        );
圈圈圆圆圈圈 2024-10-29 19:11:17

考虑重写您的 FOREIGN KEY 声明,以显式列出 foo_ent 中您想要键入的列:

CREATE TABLE cat_ent(some_item INTEGER,
yyy_no VARCHAR(80),
苹果 DECIMAL(6,2),
主键(some_item),
外键 (yyy_no) 参考 foo_ent(yyy_no))
引擎=InnoDB;

对我有用。

Consider rewriting your FOREIGN KEY declaration to explicitly list the column in foo_ent that you want to key on:

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;

works for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文