错误代码1005 - 无法创建表

时间:2017-02-24 13:20:36

标签: mysql

在我的表中添加外键时遇到问题。

CREATE TABLE event (
    id BIGINT(20) NOT NULL AUTO_INCREMENT,
    issued DATETIME NOT NULL,
    user VARCHAR(255) NOT NULL,
    subject VARCHAR(255) NOT NULL,
    attending BIGINT(255) NOT NULL,
    attendees VARCHAR(255) NOT NULL,
    organisers VARCHAR(255) NOT NULL,
    place BIGINT(20) NOT NULL,
    started DATETIME NOT NULL,
    stopped DATETIME NOT NULL,
    content LONGTEXT NOT NULL,
    broadcasting TINYINT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (place)
            REFERENCES place (id),
    FOREIGN KEY (user)
            REFERENCES user (username)
)

地方的外键正在执行正常但是一旦我尝试将用户添加为外键,我就会遇到同样的错误:

  

错误代码:1005。无法创建表'iservices.event'(错误号:150)

有人可以帮忙吗?

用户表的图片: User table

地方表的图片: Place table

有没有扩展MySQL Workbench中的错误?

4 个答案:

答案 0 :(得分:0)

外键必须是unique,因此要使用户名唯一(这可能不是最好的主意)或选择与用户ID不同的内容。

我的建议:在用户表中添加一个主要的自动增量键,并将其用作外键。

答案 1 :(得分:0)

  1. 引用列必须是唯一的。你的情况没问题。
  2. 子表和父表中的列必须属于同一类型。在你的情况下,他们是不同的。

答案 2 :(得分:0)

您能否确保存在userplace表并将相应的列设置为primary key?下面的剪辑工作正常:

CREATE TABLE user(username VARCHAR(255) PRIMARY KEY);
CREATE TABLE place(id BIGINT(20) PRIMARY KEY);

CREATE TABLE event (
    id BIGINT(20) NOT NULL AUTO_INCREMENT,
    issued DATETIME NOT NULL,
    user VARCHAR(255) NOT NULL,
    subject VARCHAR(255) NOT NULL,
    attending BIGINT(255) NOT NULL,
    attendees VARCHAR(255) NOT NULL,
    organisers VARCHAR(255) NOT NULL,
    place BIGINT(20) NOT NULL,
    started DATETIME NOT NULL,
    stopped DATETIME NOT NULL,
    content LONGTEXT NOT NULL,
    broadcasting TINYINT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (place)
            REFERENCES place (id),
    FOREIGN KEY (user)
            REFERENCES user (username)
)

这是 SQL Fiddle

答案 3 :(得分:0)

我遇到了类似的错误。 当您尝试从主表中添加非主键作为辅助表中的外键时,会发生这种情况。

为避免这种情况,辅助表中的外键必须是主表中的主键。