【问题标题】:MySQL create table fails due to foreignkey由于外键,MySQL 创建表失败
【发布时间】:2012-12-20 11:04:47
【问题描述】:

这似乎是一个非常常见的问题,但尽管我在过去 2 天内阅读了所有帖子和伪教程,但我似乎无法找到答案:/

我目前正在从事的项目迫使我学习如何使用 MySQL,但我似乎遇到了关于 ForeignKeys 或 Indexes 的问题。

我有这些创建:
http://paste.ubuntu.com/1503473/

编辑:在此处插入关键部分会导致上面的链接有时会失效:

   CREATE TABLE user_book (
        userid  Varbinary(16),
        bookid Varbinary(16),

        PRIMARY KEY(userid, bookid),

        INDEX(userid),
        FOREIGN KEY(userid)  REFERENCES user,

        INDEX (bookid),
        FOREIGN KEY(bookid) REFERENCES book

    )ENGINE=INNODB;

    Made the same mistake at user_chapter.

但是sql在“user_book”表中抛出错误:
#1005 - 无法创建表 'mangressdb.user_book' (errno: 150)

如果你能在我快哭出来的时候帮助我,那就太好了。这可能只是我的一个非常愚蠢的错误,但我找不到它。

【问题讨论】:

    标签: mysql indexing foreign-keys


    【解决方案1】:

    看起来您在 DDL 中遇到了名称冲突。尝试明确指定要用于外键的父表列:

    CREATE TABLE user_book (
        userid  Varbinary(16),
        bookid Varbinary(16),
    
        PRIMARY KEY(userid, bookid),
    
        INDEX(userid),
        FOREIGN KEY(userid)  REFERENCES user (userid),
    
        INDEX (bookid),
        FOREIGN KEY(bookid) REFERENCES book (bookid)
    
    )ENGINE=INNODB;
    

    您还需要为user_chapter 表显式指定父列名称。

    【讨论】:

    • 是的,这就是问题所在!非常感谢!我重命名了这些列,它起作用了!但是你说过关于指定表格的事情吗?你能告诉我该怎么做吗? book.bookid 看起来不起作用..
    • 不,除了列之外,您不需要任何额外的规范。对不起,如果我的例子不清楚。很高兴听到它现在为您工作!
    • 天哪!我怎么会错过!我可能通读了 100 遍代码。看来我在这里问问题只是为了让自己难堪^^"但是非常感谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多