错误代码1005 - 无法创建表

问题描述:

无法将外键添加到我的表中。错误代码1005 - 无法创建表

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

的地方外键正在执行正常,但一旦我尝试添加用户作为一个外键我不断收到同样的错误:

Error Code: 1005. Can't create table 'iservices.event' (errno: 150)

谁能帮助?

图片用户表: User table

地方台的图片: Place table

反正是有扩大的MySQL Workbench中的错误?

+0

为什么用户是varchar? – Sepultura

+0

它指的是一个用户名。 – Ellen

+0

显示两张参考表 – Mihai

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

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

+0

正如您从我添加的图片中看到的那样,它是唯一的。它是用户表中的PK。 – Ellen

+0

用户表在开始工作之前已经是应用程序的一部分,无法编辑。 – Ellen

+0

好吧,那么它已经是唯一的 – Sepultura

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

我不知道我是否在这里失去了一些东西。你在哪里可以看到类型不同? – Ellen

+0

对不起,我的错。 – Devart

+0

另一个问题。这些表中是否有数据? – Devart

能否请您确保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

+0

它们都被创建。我有添加到我的问题的照片证实了这一点。 – Ellen