更改MySQL表以添加外键约束会导致错误

时间:2012-04-29 02:38:34

标签: mysql

问题:

为什么在尝试使用外键约束更改表时会出错?

详细说明:

我有一个表HSTORY,我将其用作所有其他特定历史记录表的基表(即。USER_HISTORYBROWSER_HISTORYPICTURE_HISTORY ...) 。我还调用了PICTUREUSER表。

HISTORY表:

CREATE TABLE IF NOT EXISTS HISTORY
(
   ID        INT NOT NULL AUTO_INCREMENT,
   VIEWERID  INT NOT NULL ,
   VIEWDATE  TIMESTAMP NOT NULL DEFAULT NOW(),

   PRIMARY KEY (ID),
   FOREIGN KEY (VIEWERID) REFERENCES USER(ID)
)
engine=innodb;

USER表:(如果有人好奇的话)

CREATE TABLE IF NOT EXISTS USER
(
   ID        INT NOT NULL AUTO_INCREMENT,

   PRIMARY KEY (ID)
)
engine=innodb;

PICTURE表:(如果有人好奇的话)

CREATE TABLE IF NOT EXISTS PICTURE
(
   ID        INT NOT NULL AUTO_INCREMENT,

   PRIMARY KEY (ID)
)
engine=innodb;

PICTURE_HISTORY表:

CREATE TABLE IF NOT EXISTS PICTURE_HISTORY LIKE HISTORY;

ALTER TABLE PICTURE_HISTORY
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);

然而,当我这样做时,我得到:

Key column 'FOREIGNID' doesn't exist in table

我认为这意味着我必须首先创建FOREIGNID,但在SO的许多示例中,上述应该有效。有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:25)

感谢Michael指出我的错误。除非列已经存在,否则我实际上无法创建外键。如果我发出这两个命令,则创建外键约束:

ALTER TABLE PICTURE_HISTORY
ADD COLUMN FOREIGNID INT NOT NULL;

ALTER TABLE PICTURE_HISTORY
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);

答案 1 :(得分:8)

您可以使用逗号组合mysql命令,如下所示:

ALTER TABLE PICTURE_HISTORY
ADD COLUMN FOREIGNID INT NOT NULL,
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);
相关问题