Pregunta:
¿Por qué recibo errores al intentar modificar una tabla con una restricción de clave externa?tabla MySQL añadir restricción de clave externa conduce a errores
Detalles:
tengo 1 mesa, HSTORY
que utilizo como una tabla de base para todas las demás tablas de la historia específica (es decir USER_HISTORY
, BROWSER_HISTORY
, PICTURE_HISTORY
....). También incluí las tablas PICTURE
y USER
a medida que reciban llamadas.
tabla de historia:
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;
tabla de usuario: (por si alguien tiene curiosidad)
CREATE TABLE IF NOT EXISTS USER
(
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
engine=innodb;
mesa IMAGEN: (por si alguien tiene curiosidad)
CREATE TABLE IF NOT EXISTS PICTURE
(
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
engine=innodb;
tabla
PICTURE_HISTORY:
CREATE TABLE IF NOT EXISTS PICTURE_HISTORY LIKE HISTORY;
ALTER TABLE PICTURE_HISTORY
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);
Sin embargo, cuando hago esto, me sale:
Key column 'FOREIGNID' doesn't exist in table
tomo esto como que tengo que crear primero FOREIGNID
, pero en muchos de los ejemplos en SO, lo anterior debería funcionar. Alguien sabe por qué esto está ocurriendo?
Me gustaría ver un ejemplo en el eso debería funcionar ... No funcionará a menos que 'FOREIGNID' ya exista. No puede crear una columna simplemente creando una restricción que la use. –
@Michael tendría que emitir dos instrucciones de modificación (una para crear 'FOREGINID' y otra para convertirla en FOREIGN KEY' o puedo hacerlo de una vez? – puk
No estoy seguro - Nunca lo he intentado, así que no No sé si se quejará si intenta una afirmación. Solo pruébela: 'ALTER TABLE PICTURE_HISTORY ADD FOREIGNID INT NOT NULL ADD CONSTRAINT fk_pictureid FOREIGN KEY (FOREIGNID) REFERENCES PICTURE (ID);' –