Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Para que serve a palavra chave CONSTRAINT?

Olá Vi que em alguns casos é utilizada a palavra chave CONSTRAINT ao adicionar uma chave-primária ou estrangeira em uma tabela; mas em alguns casos essa palavra é omitida. Pesquisei um pouco e não consegui entender exatamente o que essa palavra chave determina. Pelo que entendi, o uso de "ADD CONSTRAINT" permite dar uma "apelido" à referência, mas não sei se entendi certo e, se entendi, quando isso seria útil. Exemplo:

Sem usar CONSTRAINT

ALTER TABLE PEDIDOS (
    ADD FOREIGN KEY (cpf_cliente) REFERENCES CLIENTES (cpf);

Usando CONSTRAINT

ALTER TABLE PEDIDOS 
ADD CONSTRAINT fk_cpf_cliente FOREIGN KEY (cpf_cliente) REFERENCES CLIENTES (cpf);

Obrigado.

4 respostas

Oi, Eduardo! Tudo bem por aí?

Você está certo em sua observação! A palavra-chave CONSTRAINT no MySQL é usada para definir ou nomear uma restrição.

A principal diferença entre usar ou não a palavra CONSTRAINT está na facilidade de gerenciamento dessas restrições. Quando você usa CONSTRAINT, fica mais fácil, por exemplo, referenciar essa restrição em comandos futuros, como em exclusões e atualizações.

Além disso, quando não usamos CONSTRAINT ao adicionar uma chave estrangeira (ou qualquer outra restrição), o SGBD geralmente criará automaticamente um nome para essa restrição. Esse nome pode não ser intuitivo e pode ser algo difícil de lembrar ou reconhecer.

As restrições sempre estarão presentes ao criar, por exemplo, chaves primárias e estrangeiras (a fim de manter a integridade do nosso banco de dados). Logo, "apelidá-las" trata-se de um exemplo de boa prática.

Espero que tenha ficado mais claro, Eduardo! Qualquer dúvida, fico à disposição.

Um abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Sim, vi que esse "apelido" pode ser criado com um nome intuitivo em vez de deixar o SGBD criar automaticamente. Mas, quando vou realizar uma consulta, por exemplo, sempre a faço usando o nome da chave estrangeira, em vez de usar o nome da restrição. Exemplo:

SELECT U.nome , P.id_pedido
FROM USUARIOS U
JOIN PEDIDOS P ON P.id_usuario = U.id_usuario

Poderia me citar um exemplo do apelido sendo usado para algo?

Obrigado.

solução!

Oi, Eduardo!

Neste contexto, é importante mencionar que o "apelido" da restrição não é utilizado diretamente nas consultas SQL para obter ou manipular dados, como no exemplo SELECT que você forneceu.

Tal nome é mais relevante para operações de manutenção de esquema e para garantir a integridade dos dados, ao invés de consultas de dados propriamente ditas.

Abaixo, temos dois exemplos de utilização:

  • Exclusão de uma restrição:

    Se, em algum momento, decidirmos que não precisamos mais da chave estrangeira entre PEDIDOS e USUARIOS, precisaríamos do nome da restrição para removê-la:

    ALTER TABLE PEDIDOS DROP FOREIGN KEY fk_cpf_cliente;
    

    Dessa forma, a coluna cpf_cliente continuaria existindo na tabela PEDIDOS, contudo, não estaria mais conectada (por meio de uma restrição) à CLIENTES.

  • Alterando a referência da chave estrangeira:

    Imagine que, após criar a restrição da chave estrangeira de PEDIDOS — tendo como base a coluna cpf de CLIENTES —, uma nova coluna chamada codigo_cliente surgiu e será a nossa nova referência.

    Precisaremos, portanto, executar este script SQL, que exclui a restrição antiga e cria uma nova:

    ALTER TABLE PEDIDOS
    DROP FOREIGN KEY fk_cpf_cliente; 
    
    ALTER TABLE PEDIDOS
    ADD CONSTRAINT fk_codigo_cliente 
    FOREIGN KEY (codigo_cliente) REFERENCES CLIENTES (codigo_cliente);
    

Note que, em ambos exemplos, foi necessário utilizar de modo direto o "apelido" fornecido anteriormente à restrição. Se não a tivéssemos nomeado, teríamos que procurá-la no esquema do banco de dados o nome gerado automaticamente pelo SGBD — uma atividade não muito conveniente e prática.

Espero que estes exemplos tenham te ajudado, Eduardo!

Até mais.

Entendi! Muito obrigado!