Вопрос:
Почему я получаю сообщение об ошибке при попытке изменить таблицу с ограничением внешнего ключа?изменяющего 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;
стол 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, вышеуказанное должно работать. Кто-нибудь знает, почему это происходит?
Я хотел бы видеть пример, где это должно работать ... Это не сработает, если 'FOREIGNID' уже существует. Вы не можете создать столбец, просто создав ограничение, которое его использует. –
@ Michael мне пришлось бы выпустить два предложения alter (один для создания 'FOREGINID', а другой - для FOREIGN KEY', или я могу сделать это за один раз? – puk
На самом деле не уверен - я никогда не пробовал, поэтому я не знаю, будет ли он жаловаться, если вы попытаетесь выполнить одно утверждение. Просто попробуйте: «ALTER TABLE PICTURE_HISTORY ADD FOREIGNID INT NOT NULL ADD CONSTRAINT fk_pictureid FOREIGN KEY (FOREIGNID) ССЫЛКИ ИЗОБРАЖЕНИЕ (ID);' –