Подтвердить что ты не робот

Изменение таблицы MySQL для добавления ограничения внешнего ключа приводит к ошибкам

Вопрос:

Почему я получаю ошибки при попытке изменить таблицу с ограничением внешнего ключа?

Детали:

У меня есть 1 таблица, 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;

Таблица USER: (в случае, если кому-то интересно)

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 выше должно работать. Кто-нибудь знает, почему это происходит?

4b9b3361

Ответ 1

Благодаря Michael для указания моей ошибки. Я не могу сделать внешний ключ, если столбец уже не существует. Если вместо этого я выдаю эти две команды, создается ограничение внешнего ключа:

ALTER TABLE PICTURE_HISTORY
ADD COLUMN FOREIGNID INT NOT NULL;

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

Ответ 2

Вы можете комбинировать команды для mysql с помощью запятой, например:

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