CASCADE
propagará a alteração quando o pai for alterado. (Se você excluir uma linha, as linhas em tabelas restritas que fazem referência a essa linha também serão excluídas etc.) SET NULL
define o valor da coluna como NULL quando uma linha pai desaparece. RESTRICT
faz com que a tentativa de DELETE de uma linha pai falhe. EDIT:Você não perguntou sobre eles, mas o padrão SQL define duas outras ações:
SET DEFAULT
e NO ACTION
. No MySQL, NO ACTION
é equivalente a RESTRICT
. (Em alguns SGBDs, NO ACTION
é uma verificação adiada, mas no MySQL todas as verificações são imediatas.) O analisador do MySQL aceita SET DEFAULT
, mas os mecanismos InnoDB e NDB rejeitam essas instruções, então SET DEFAULT
não pode ser usado para um ON UPDATE
ou ON DELETE
limitação. Além disso, observe que ações de chave estrangeira em cascata não ativam gatilhos no MySQL.