¿Cómo cambiar la acción referencial de la clave foránea? (comportamiento)

He configurado una tabla que contiene una columna con una clave externa, configurada en ON DELETE CASCADE (eliminar hijo cuando se elimina el elemento primario)

¿Cuál sería el comando SQL para cambiar esto a ON DELETE RESTRICT ? (no se puede eliminar el padre si tiene hijos)

Pregunta anterior pero agregando respuesta para que uno pueda obtener ayuda

Su proceso de dos pasos:

Supongamos que una table1 tiene una clave externa con el nombre de la columna fk_table2_id , con el nombre de la restricción fk_name y la table2 se refiere a la tabla con la clave t2 ( algo como lo que se muestra a continuación en mi diagtwig ).

  table1 [ fk_table2_id ] --> table2 [t2] 

Primer paso , DROP old CONSTRAINT: ( referencia )

 ALTER TABLE `table1` DROP FOREIGN KEY `fk_name`; 

la restricción de aviso se borra, la columna no se borra

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; 

añadiendo restricción, la columna ya está allí

Ejemplo:

Tengo una tabla UserDetails se refiere a la tabla de Users :

 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:

 ALTER TABLE table_name DROP FOREIGN KEY `fk_name`, ADD CONSTRAINT `fk_name2` FOREIGN KEY (`remote_id`) REFERENCES `other_table` (`id`) ON DELETE CASCADE; 

Esto es útil para minimizar el tiempo de inactividad si tiene una mesa grande.

 ALTER TABLE DROP FOREIGN KEY fk_name; ALTER TABLE ADD FOREIGN KEY fk_name(fk_cols) REFERENCES tbl_name(pk_names) ON DELETE RESTRICT; 

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

  • soltar FK original
  • soltar un índice (nombres como fk anterior, usando la cláusula drop index )
  • crear nuevo FK

Simplemente puede usar una consulta para gobernarlas todas: 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