【问题标题】:Following SQL generates error 1005 and errno 150 in MySQL以下 SQL 在 MySQL 中生成错误 1005 和 errno 150
【发布时间】:2015-12-11 05:07:06
【问题描述】:

以下 SQL 导致 mysql 在 message 中生成错误 1005 和 errno 150:

CREATE TABLE Review_Record (
  id int NOT NULL PRIMARY KEY AUTO_INCREMENT UNIQUE ,
  file MEDIUMBLOB,
  submission_id INT not null ,
  reviewer_id VARCHAR(50) not null ,
  file_mime VARCHAR(20),
  rating INT,
  assigned_time TIMESTAMP default CURRENT_TIMESTAMP,
  completed_time TIMESTAMP,
  completed BOOLEAN DEFAULT FALSE ,
  FOREIGN KEY (submission_id) REFERENCES Submission (id),
  FOREIGN KEY (reviewer_id) REFERENCES Reviewer (id)
) ENGINE = INNODB;

在查阅了 mysql 文档后,我找到了关于这个错误的以下描述:

  • 1005 (ER_CANT_CREATE_TABLE)

无法创建表。如果错误消息是指错误 150,则表 创建失败,因为外键约束不正确 形成。如果错误消息是指错误-1,则创建表 可能失败,因为该表包含匹配的列名 内部 InnoDB 表的名称。

但是我的外键约束是怎么形成的?

【问题讨论】:

  • submit_id 和 reviewer_id 的数据类型是否与引用的列相同? (reviewer_id 是 varchar 50 让我想知道)
  • 哦,愚蠢的我!在int 键上使用varchar!谢谢@Devon!
  • 不客气。问题解决了吗?
  • 是的!您可以在下面发布答案,我会接受!

标签: mysql innodb


【解决方案1】:

创建外键时,确保数据类型和字符集相同很重要。

在这种情况下,Reviewer.id (int) 的数据类型与 Review_Record.reviewer_id (varchar 50) 不匹配。

(参考cmets)

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 2016-07-27
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2011-02-17
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多