2

我觉得我已经在一对非常简单的 create table 语句上尝试了所有可能的方法。

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