Resumo: neste tutorial, irá aprender sobre a restrição do PostgreSQL UNIQUE
para se certificar de que os valores armazenados numa coluna ou num grupo de colunas são únicos entre linhas numa tabela.
às vezes, você quer garantir que os valores armazenados em uma coluna ou um grupo de colunas são únicos em toda a tabela, como endereços de E-mail ou nomes de usuário.
PostgreSQL fornece-lhe a restrição UNIQUE
que mantém a unicidade dos dados correctamente.
quando existe uma restrição UNIQUE
, sempre que introduz uma nova linha, verifica se o valor já está na tabela. Rejeita a mudança e emite um erro se o valor já existe. O mesmo processo é realizado para a atualização dos dados existentes.
quando adicionar uma restrição UNIQUE
a uma coluna ou a um grupo de colunas, o PostgreSQL irá criar automaticamente um índice único na coluna ou no grupo de colunas.
exemplo de restrição única PostgreSQL
a seguinte declaração cria uma nova tabela chamada person
com uma restrição UNIQUE
para a coluna email
.
Code language: SQL (Structured Query Language) (sql)
Observe que o UNIQUE
restrição acima pode ser reescrito como uma restrição de tabela, conforme mostrado na seguinte consulta:
Code language: SQL (Structured Query Language) (sql)
Primeiro, inserir uma nova linha em person
tabela usando INSERT
instrução:
Code language: SQL (Structured Query Language) (sql)
inserir em Segundo lugar, outra linha com os e-mails duplicados.
Code language: SQL (Structured Query Language) (sql)
PostgreSQL emitiu uma mensagem de erro.
Code language: SQL (Structured Query Language) (sql)
criando uma restrição única em várias colunas
PostgreSQL permite-lhe criar uma restrição UNIQUE
a um grupo de colunas usando a seguinte sintaxe:
Code language: SQL (Structured Query Language) (sql)
a combinação de valores na coluna c2 E c3 será única em toda a tabela. O valor da coluna c2 ou c3 não tem de ser único.
adicionando uma restrição única usando um índice único
às vezes, você pode querer adicionar uma restrição única a uma coluna ou grupo de colunas existentes. Vamos dar uma olhada no seguinte exemplo.Primeiro, suponha que tem uma tabela chamada equipment
:
Code language: SQL (Structured Query Language) (sql)
em segundo lugar, criar um índice único baseado na coluna equip_id
.
Code language: SQL (Structured Query Language) (sql)
Third, add a unique constraint to the equipment
table using the equipment_equip_id
index.
Code language: SQL (Structured Query Language) (sql)
Notice that the ALTER TABLE
statement acquires an exclusive lock on the table. Se você tiver quaisquer transações pendentes, ele vai esperar por todas as transações para completar antes de mudar a tabela. Portanto, você deve verificar o pg_stat_activity
tabela para ver as atuais transações pendentes que estão em andamento usando a seguinte consulta:
Code language: SQL (Structured Query Language) (sql)
Você deve olhar para o resultado para localizar o state
coluna com o valor de idle in transaction
. Essas são as transações que estão pendentes para completar.
neste tutorial, você aprendeu sobre restrições UNIQUE
E como usá-las para impor valores armazenados em uma coluna ou um grupo de colunas únicas entre linhas dentro da mesma tabela.
- este tutorial foi útil ?
- YesNo