No MySQL Server 3.23.44 e posterior, tabelas
InnoDB
suportam verificação de
restrição de chaves estrangeiras, incluindo
CASCADE
, ON DELETE
, e
ON UPDATE
. See
Secção 7.5.5.2, “Restrições FOREIGN KEY
”.
Para outros tipos de tabela, o MySQL Server atualmente apenas
analisa a sintaxe de FOREIGN KEY
no comando
CREATE TABLE
, mas não usa/armazena esta
informação. Em um futuro próximo esta implementação será
estendida para que assim a informação seja armazenada num
arquivo de especificação de tabela e possa ser recuperado
por mysqldump
e ODBC. Em um estágio
posterior, restrições de chaves estrangeiras serão
implementadas para tabelas MyISAM
.
Note que as chaves estrangeiras no SQL não são usadas para
ligar tabelas, mas são usadas para verificar a integridade
referencial. Se você deseja obter resultados de múltiplas
tabelas de uma instrução SELECT
, você
pode fazer isto ligando tabelas:
SELECT * FROM table1,table2 WHERE table1.id = table2.id;
See Secção 6.4.1.1, “Sintaxe JOIN
”. See
Secção 3.6.6, “Utilizando Chaves Estrangeiras”.
Quando usada como uma restrição, FOREIGN
KEY
s não precisa ser usado se a aplicação insere
duas linhas em tabelas MyISAM
na ordem
apropriada.
Para tabelas MyISAM
, você pode contornar a
falta de ON DELETE
adicionando a
instrução DELETE
apropriada a uma
aplicação quando você deletar registros de uma tabela que
tem uma chave estrangeira. Na prática isto é mais rápido e
muito mais portável que utilizar chaves estrangeiras.
No MySQL Server 4.0 você pode utilizar deleções
multi-tabela para apagar linha de muitas tabelas com um
comando. See Secção 6.4.5, “Sintaxe DELETE
”.
A sintaxe FOREIGN KEY
sem ON
DELETE ...
é usada geralmente por aplicacões ODBC
para produzir cláusulas WHERE
automáticas.
Note que chaves estrangeiras são mal usadas com frequência, o que pode causar graves problemas. Mesmo quando usado apropriadamente, o suporte a chaves estrangeiras não é uma solução mágica para o problema de integridade referêncial, embora possa ajudar.
Algumas vantagens das chaves estrangeiras:
Assumindo o projeto apropriado das relações, as restrições de chaves estrangeiras tornarão mais difícil para um programador introduzir uma inconsistência no banco de dados.
Usar atualizações e deleções em cascata pode simplificar o código do cliente.
Regras de chaves estrangeiras projetados apropriadamente ajudam ao documentar a relação entre as tabelas.
Desvantagens:
Erros, que são facéis de se ter ao projetar a relação das chaves, podem causar graves problemas¯por exemplo, regras circulares ou a combinação errada de uma deleção em cascata.
Verificação adicional no banco de dados afeta o desempenho, por esta razão algumas das principais aplicações comerciais codificam sua lógica no nível da aplicação.
Não é incomum para um DBA fazer uma topologia complexa de relações que torna muito difícl, e em alguns casos impossível, fazer backup ou restaurar tabelas individuais.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.