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

时间:2011-03-18 21:19:23

标签: mysql sql sql-server mysql-error-1005

我觉得我已经在一对非常简单的创建表语句中尝试了所有可能的事情。

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

抱歉变量名称不佳,可以安全地覆盖公司的内容。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)
        );

答案 2 :(得分:0)

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

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

适合我。