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

2024-04-17

问题:

为什么在尝试更改具有外键约束的表时会出现错误?

Details:

我有1张桌子,HSTORY我将其用作所有其他特定历史表(即USER_HISTORY, BROWSER_HISTORY, PICTURE_HISTORY...)。我还包括了PICTURE and USER表也​​被称为。

历史表:

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;

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

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

   PRIMARY KEY (ID)
)
engine=innodb;

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

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 的示例中,上述内容应该有效。有谁知道为什么会发生这种情况?


谢谢Michael https://stackoverflow.com/users/541091/michael指出我的错误。除非该列已经存在,否则我实际上无法创建外键。如果我发出这两个命令,则会创建外键约束:

ALTER TABLE PICTURE_HISTORY
ADD COLUMN FOREIGNID INT NOT NULL;

ALTER TABLE PICTURE_HISTORY
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 MySQL 表以添加外键约束会导致错误 的相关文章

随机推荐