Dúvida MySQL Chave estrangeira, o que é OnDelete e OnUpdate?

2 respostas
V

Galera estou fazendo um sistema em java e usando JPA, mas estou configurando o Mysql bem certinho tb… uso o MYSQL 5.0 uso o MYSQL Administrator para gerenciar o banco, tem 2 opções quando coloco chave estrangeira que é OnDelete e OnUpdate, imagino que são ações que ocorrem quando na tabela de origem acontecer uma deleção ou atualização. Mas para que serve as ações que você seleciona para elas, NoAction (na certa é para não fazer nada), set Null, Restrict, Cascade???

2 Respostas

J

Imagine os seguintes dados:

clientes
id  nome
1   Jair
2   João
3   Maria

compras
id   data         id_cliente
1    01/01/2008  1
2    05/01/2008  2
3    07/03/2008  1

Ao excluir o registro 1 da tabela clientes por exemplo, as opções serão as seguintes:

NoAction: o registro da tabela clientes será excluido e o registro da tabela compras no campo id_cliente continuará referenciando o cliente 1 que não existe mais.

SetNull: o registro da tabela clientes será excluido e o campo id_cliente da tabela compras terá o valor NULL.

Restrict: o registro da tabela clientes não poderá ser excluído enquanto existir alguma referencia pra ele na tabela compras, para excluir o registro da tabela clientes antes você terá que exluir os registro da tabela compras que o referenciam.

Cascade: o registro 1 da tabela clientes será excluido e tambem os registros 1 e 3 da tabela compras.

Mais detalhes sobre isso e o comportamento do MySQL nessas situações você pode ler em:

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

V

mas detalhe impossível, já tirou todas as minhas dúvidas sobre o OnDelete, muito obrigado, no caso do OnUpdate, como por exemplo funcionaria o restrict, afinal vc só está fazendo uma alteração, vc teria que deletar as referências só para atualizar???, me explica por favor o OnUpdate também.

Criado 9 de março de 2008
Ultima resposta 19 de mar. de 2008
Respostas 2
Participantes 2