【问题标题】:Foreign Key Error on MySQL CREATE TABLE statement (err: 150)MySQL CREATE TABLE 语句的外键错误(错误:150)
【发布时间】:2011-07-18 11:51:21
【问题描述】:

我觉得我已经在一对非常简单的 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)

很抱歉变量名不好,可以安全地覆盖公司的东西。

【问题讨论】:

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


    【解决方案1】:

    你没有引用一个字段,只引用一个表格,这是不正确的。

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

    【讨论】:

    • 啊,我一度以为你只需要在两者的字段名称不同时指定表的字段。也许他们改变了这一点,或者我不正确。谢谢!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      创建表 cat_ent(some_item INTEGER, yyy_no VARCHAR(80), 苹果十进制(6,2), 主键(some_item), 外键 (yyy_no) 参考 foo_ent(yyy_no)) 引擎=InnoDB;

      为我工作。

      【讨论】:

        猜你喜欢
        • 2012-07-08
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 1970-01-01
        • 2017-06-30
        相关资源
        最近更新 更多