Hola a todos.
La duda es si puedo crear una constraint para que la cláusula ON DELETE SET NULL afecte a varios campos de una sola vez, ya que me sucede lo siguiente. En una tabla tengo tres referencias foráneas a un mismo campo y en esos tres campos tengo puesto ON DELETE SET NULL. Al intentar borrar los datos a los que hacen referencia, el error comienza en el segundo campo, ya que si los tres campos los pongo como ON DELETE SET NULL, ON DELETE CASCADE y ON DELETE CASCADE, no sucede el error.
Mi idea de lo que sucede es que al borrar la fila a la que hacen referencia los tres campos, sólo se "activa" en ese mismo momento el primer ON DELETE SET NULL y en los otros provoca error porque la clave foránea que contienen ya no existe. Sin embargo, si hago una constraint para los tres campos, y cada campo no hiciera referencia a la misma fila, me borraría campos que no debería.
Espero haber conseguido explicar el problema. Por si acaso, pongo un ejemplo simplificado de como lo tengo hecho:
Código PHP:
CREATE TABLE usuario (
COD_USUARIO INTEGER PRIMARY KEY
);
CREATE TABLE sub_usuario (
COD_SUB_USUARIO INTEGER PRIMARY KEY,
DEPENDE1 REFERENCES usuario ON DELETE SET NULL,
DEPENDE2 REFERENCES usuario ON DELETE SET NULL,
DEPENDE3 REFERENCES usuario ON DELETE SET NULL
);
Como veréis si lo probáis y no me estoy confundiendo, si los tres SUB_USUARIOS apuntan al mismo usuario, sucede que sólo afecta al primer SET NULL y los demás dan error porque parecen no ejecutarse.
Nota: si pusiera ON DELETE CASCADE no daría error, pero no quiero borrar a los sub_usuarios que no hagan referencia a ese usuario que haya sido borrado.