create tabla1
(
A int,
B int,
C int,
primary key(A)
)
create tabla2
(
A2 int,
D int,
E int,
foreign key A2 references tabla1
)
tabla1
1 2 3 (registro 1)
2 3 6 (reg 2)
2 3 4 (reg 3)
tabla2
1 2 4 (reg 4)
1 3 6 (reg 5)
2 3 5 (reg 6)
A2 debe tener siempre valores que estén en A.
Si alguien borra reg1, si la opcion ON DELETE CASCADE está, entonces se borran reg4 y reg5, porque tienen un valor inválido de A2. Si esa opcion no está presente, se rechaza la acción.
Si en cambio al borrar reg1, se encuentra ON DELETE SET NULL, tabla2 cambia reg4 y reg5 por:
null 2 4 (reg4)
null 3 6 (reg5)
SET DEFAULT pone el valor default en vez de null. El valor default se declara al crear la tabla.
Si alguien borra reg2, no pasa nada pq el valor "2" sigue siendo válido por reg3.
Nunca use NO ACTION pero supongo que dejaría que se borre reg1 sin cambiar nada de tabla2
Suerte!
Leo