【问题标题】:MySQL InnoDB Foreign Key ProblemsMySQL InnoDB 外键问题
【发布时间】:2015-09-15 16:13:57
【问题描述】:

我有以下表,我试图在 MySQL 中运行它们,但我一直收到 errno 150。只是不知道为什么,但 MySQL 似乎无法创建外键约束。我已经查看了为 InnoDB 设置 FK 的规则,一切似乎都很好。有人可以借给我另一套眼睛和专业知识吗?

-- Table publication_type (parent table)
CREATE TABLE publication_type (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  publication_type varchar(55)  NOT NULL,
  tstamp timestamp  NOT NULL  DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT publication_type_pk PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

-- Table publication (child table)
CREATE TABLE publication (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  authors varchar(255)  NOT NULL,
  publication_title varchar(100)  NOT NULL,
  publication_type_id int(11) UNSIGNED NOT NULL,
  user_id int(11) UNSIGNED NOT NULL,
  CONSTRAINT publication_pk PRIMARY KEY (id),
  CONSTRAINT publication_type_fk FOREIGN KEY (publication_type_id)  REFERENCES publication_type(id) ON DELETE SET NULL ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

【问题讨论】:

    标签: mysql foreign-keys innodb errno


    【解决方案1】:

    类型不匹配:

    publication_type.id 的类型为 int UNSIGNED

    publication.publication_type_id 的类型为 int

    另请参阅文档:http://dev.mysql.com/doc/refman/5.1/en/create-table-foreign-keys.html,具体而言:

    外键和引用键中的对应列必须 具有相似的数据类型。 整数类型的大小和符号必须是 一样的。字符串类型的长度不必相同。为了 非二进制(字符)字符串列、字符集和排序规则 必须相同。

    强调我的。

    【讨论】:

    • 感谢@Matteo,但我编辑了脚本(见上文),它仍然给出同样的错误。
    • 然后运行SHOW INNODB STATUS 并检查实际错误可能是什么。
    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 2015-05-12
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2016-03-19
    相关资源
    最近更新 更多