问题:
为什么在尝试更改具有外键约束的表时会出现错误?
细节:
我有一个名为 HSTORY
的表,我将其用作所有其他特定历史记录表(即 USER_HISTORY
、BROWSER_HISTORY
、PICTURE_HISTORY
等)的基础表。 我还包括了 PICTURE
和 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的示例中,上述代码应该可以工作。有人知道这是为什么吗?
FOREIGNID
已经存在,否则它不会起作用。你不能仅通过创建使用它的约束来创建一个列。 - Michael BerkowskiFOREGINID
,另一个将其设置为 FOREIGN KEY),还是可以一次性完成? - pukALTER TABLE PICTURE_HISTORY ADD FOREIGNID INT NOT NULL ADD CONSTRAINT fk_pictureid FOREIGN KEY (FOREIGNID) REFERENCES PICTURE (ID);
- Michael Berkowski