Pregunta anterior pero agregando respuesta para que uno pueda obtener ayuda
Su proceso de dos pasos:
Supongamos que a table1
tiene una clave externa con nombre de columna fk_table2_id
, con nombre de restricciónfk_name
y table2
se refiere a una tabla con clave t2
( algo como a continuación en mi diagrama ).
table1 [ fk_table2_id ] --> table2 [t2]
Primer paso , ELIMINAR la vieja RESTRICCIÓN: ( referencia )
ALTER TABLE `table1`
DROP FOREIGN KEY `fk_name`;
aviso de restricción se elimina, la columna no se elimina
Segundo paso , AGREGUE una nueva RESTRICCIÓN:
ALTER TABLE `table1`
ADD CONSTRAINT `fk_name`
FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;
agregando restricción, la columna ya está allí
Ejemplo:
Tengo una UserDetails
tabla se refiere a la Users
tabla:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`)
:
:
Primer paso:
mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
Query OK, 1 row affected (0.07 sec)
Segundo paso:
mysql> ALTER TABLE `UserDetails` ADD CONSTRAINT `FK_User_id`
-> FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`) ON DELETE CASCADE;
Query OK, 1 row affected (0.02 sec)
resultado:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES
`Users` (`User_id`) ON DELETE CASCADE
:
Puede hacer esto en una consulta si está dispuesto a cambiar su nombre:
Esto es útil para minimizar el tiempo de inactividad si tiene una mesa grande.
fuente
fuente
ALTER TABLE table_name ADD
...ON DELETE RESTRICT
SHOW CREATE TABLE
.Recuerde que MySQL mantiene un índice simple en una columna después de eliminar la clave externa. Entonces, si necesita cambiar la columna 'referencias', debe hacerlo en 3 pasos
drop index
cláusula de uso )fuente
Simplemente puede usar una consulta para gobernarlos a todos:
ALTER TABLE products DROP FOREIGN KEY oldConstraintName, ADD FOREIGN KEY (product_id, category_id) REFERENCES externalTableName (foreign_key_name, another_one_makes_composite_key) ON DELETE CASCADE ON UPDATE CASCADE
fuente
Tenía que modificar un montón de FK, así que escribí algo para hacer las declaraciones por mí. Pensé que compartiría:
fuente