2009-10-09 14 views
43

En mysql, ¿puedo agregar una columna y una clave externa en la misma declaración? ¿Y cuál es la sintaxis adecuada para agregar el fk?¿Cómo agregar una columna y convertirla en una clave externa en una sola instrucción MySQL?

Aquí es mi SQL:

ALTER TABLE database.table 
ADD COLUMN columnname INT DEFAULT(1), 
FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE; 

... y el mensaje de error de acompañamiento:

Usted tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho a utilizar 'FOREIGN KEY (FK_NAME) Referencias reftable (refcolumn) ON DELETE CASCADE' cerca en la línea 4

Respuesta

58

Prueba esto:

ALTER TABLE database.table 
    ADD COLUMN columnname INT DEFAULT(1), 
    ADD FOREIGN KEY fk_name(fk_column) REFERENCES reftable(refcolumn) ON DELETE CASCADE; 
+2

Y para 'fk_name' y' fk_column' Tengo que insertar whaat ...? – C4u

+4

@ C4ud3x 'fk_name' será un nombre que le gustaría dar a esta restricción en particular para fines de identificación (eso es opcional en la consulta) mysql también lo genera automáticamente, y' fk_column' es la columna de referencia que desea trabajar como clave externa. –

+0

Muy bien, gracias por explicarme. – C4u

12

La siguiente consulta agrega una columna mediante alter query y la consulta de restricción la convierte en FK en una sola consulta de mysql. Puede hacerlo de esta manera,

SINTAXIS:

ALTER TABLE `SCHEMANAME`.`TABLE1` 
ADD COLUMN `FK_COLUMN` BIGINT(20) NOT NULL, 
ADD CONSTRAINT `FK_TABLE2_COLUMN` FOREIGN KEY (`FK_COLUMN`) 
REFERENCES `SCHEMANAME`.`TABLE2`(`PK_COLUMN`); 

Ejemplo:

ALTER TABLE `USERDB`.`ADDRESS_TABLE` 
ADD COLUMN `USER_ID` BIGINT(20) NOT NULL AFTER `PHONE_NUMBER`, 
ADD CONSTRAINT `FK_CUSTOMER_TABLE_CUSTOMER_ID` FOREIGN KEY (`USER_ID`) 
REFERENCES `USERDB`.`CUSTOMER_TABLE`(`CUSTOMER_ID`); 
-1

Puede utilizarlo.

ALTER TABLE database.table 
ADD COLUMN columnname INT DEFAULT(1); 
ALTER TABLE database.table add FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE; 
Cuestiones relacionadas