Tengo dos tablas, una 'usuarios' y una 'órdenes', donde la tabla de pedidos tiene una referencia de clave externa a la tabla de identificación de usuario. (. Estoy utilizando la dirección de correo electrónico como identificador de usuario en este caso)MySql Claves foráneas: ¿ACTIVAR EL ACUERDO DE DECISIÓN DE NO ACCIÓN? ¿Cómo dejar la información en el campo al que se hace referencia?
Lo que quiero lograr es la siguiente:
Si el identificador de tabla de usuario se actualiza (= dirección de correo electrónico se cambia), este se reflejará en el campo user_id de la tabla de órdenes referenciada. (Esto funciona bien usando la directiva ON ACTUALIZACIÓN CASCADE - ¡no hay problema aquí!)
Si el usuario es eliminado de la tabla de usuarios, el orden se mantendrá, MANTENIENDO el user_id al que se hace referencia.
Estoy teniendo un problema con el segundo objetivo:
Si utilizo ON DELETE CASCADE en el campo ID de usuario que se hace referencia, la fila de orden es, por supuesto, eliminado.
Si uso ON DELETE NO ACTION, aparece un error cuando intento eliminar al usuario. (# 1451 - No se puede eliminar o actualizar una fila principal: falla una restricción de clave externa)
Si uso ON DELETE SET NULL, puedo eliminar la fila del usuario, pero la información a la que se hace referencia se establece en nula, por lo que no puedo rastrear quién hizo ese pedido ...
¿Hay alguna forma de permitir la eliminación del usuario de la tabla del usuario mientras se mantiene la información user_id referenciada en la tabla de pedidos?
¡Gracias, Mark! Entonces, eso significa que no es posible lograr lo que pedí en definiciones de clave extranjera pura ... – Cambiata
@Cambiata: Es correcto, no es posible "en definiciones de clave foránea pura". "Clave externa" * significa * que el valor existe en otra tabla. Si realmente elimina la fila referenciada de la otra tabla, debe deshacerse del valor de la clave externa a) eliminando toda la fila (ON DELETE CASCADE), ob) estableciendo el valor FK en NULL (ON DELETE SET NULL) . –
Ya veo. Esperaba que NO ACTION alternatvie significara, bueno ... ninguna acción. En el sentido de que el valor presente permanecería intacto, comportándose como un valor normal no fk. ¡Obviamente no! Gracias, Mark! – Cambiata