No MySQL 5.7
alter table mydb.roles add constraint uk1 unique (role_name);
alter table mydb.roles add constraint uk2 unique (role_name);
O 2º alter
comando me lançou um aviso informando:
Índice duplicado 'uk2' definido na tabela 'world_x.roles'. Isso está obsoleto e não será permitido em uma versão futura.
Quando tentei o mesmo no Postgres(10.x), não me avisou.
Então, qual seria o padrão SQL nesse cenário?
Pode resultar em restrições de nomes de mistura muito confusas e retardar suas consultas porque elas têm o mesmo nome
talvez este resultado seja útil
Exemplo
Nenhuma restrição dupla e nenhuma mensagem de aviso e você mantém as regras SQL vivas
Como você pode ver no link a seguir, na verdade esse cenário é um bug
https://bugs.mysql.com/bug.php?id=37520
e finalmente reconhecido em: https://bugs.mysql.com/bug.php?id=8565
e finalmente corrigido no MySQL Server 5.6.7
Isso simplesmente não é verdade.
No entanto, no PostgreSQL a maioria das pessoas não nomeia nada porque o sistema é incrível e os nomes gerados automaticamente funcionam bem,
Isso é chamado de
<table constraint definition>
na especificação, que diz isso (SQL:2011n).Restrições duplicadas não são permitidas para todo o esquema . Como aparte, a especificação também afirma que a implementação não pode gerar nomes implícitos que entrem em conflito (devem ser exclusivos).