diferença entre chave primária e chave exclusiva

252

Estou usando o banco de dados mysql. Eu tenho uma confusão entre chave primária e chave exclusiva.

Por favor, ajude-me onde devo criar a chave primária e única. Quero dizer em que situação criamos chave única ou chave primária.

Anuj
fonte
9
wrt nulo capacidade de uma boa maneira de distinguir b / w deles é PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU

Respostas:

233

Chave primária:

  • Só pode haver uma chave primária em uma tabela
  • Em alguns DBMS, não pode ser NULL- por exemplo, o MySQL adicionaNOT NULL
  • Chave Primária é um identificador de chave exclusivo do registro

Chave única:

  • Pode haver mais de uma chave exclusiva em uma tabela
  • Chave exclusiva pode ter NULLvalores
  • Pode ser uma chave candidata
  • Chave exclusiva pode ser NULL; várias linhas podem ter NULLvalores e, portanto, não podem ser consideradas "únicas"
Mr. KB
fonte
11
Também deseja adicionar essa chave primária que pode ser criada em várias colunas, por exemplo, Chave primária (Identificação do Cliente, Identificação do Produto). Isso é chamado chave primária composta. Esta é esclarecer ao primeiro ponto, como poderia ser tomada como é (leia-se uma chave => uma coluna) pelo recém-chegado ao sql:)
ken
1
Qual é o seu significado de 'pode ser uma chave candidata'?
1
"somente um nulo único é permitido" - isso não é verdade, pelo menos não para o MySQL.
Jānis Elmeris 29/08/2015
69
Chave exclusiva pode ser nula e pode não ser única Means ??
Pratik
20
@PratikCJoshi Ele provavelmente significa que pode haver várias linhas com nulo na chave exclusiva.
John
77

Chave exclusiva (Reino Unido) : é uma coluna ou um grupo de colunas que pode identificar uma exclusividade em uma linha.

Chave primária (PK) : também é uma coluna ou grupo de colunas que pode identificar uma exclusividade em uma linha.

Portanto, a chave Primária é apenas outro nome para a chave exclusiva, mas a implementação padrão no SQL Server é diferente para Chave Primária e Exclusiva.

Por padrão:

  1. PK cria um índice em cluster e o Reino Unido cria um índice não em cluster.
  2. PK não é nulo, mas o Reino Unido permite nulos (Nota: por padrão)
  3. Só pode haver um e apenas um PK em uma tabela, mas pode haver vários
  4. Você pode substituir a implementação padrão, dependendo da sua necessidade.

Depende realmente de qual é o seu objetivo ao decidir criar um Reino Unido ou PK. Segue uma analogia como "Se há uma equipe de três pessoas, então todas são colegas, mas haverá uma que será um par de colegas: PK e UK têm uma relação semelhante". Eu sugeriria a leitura deste artigo: O exemplo dado pelo autor pode não parecer adequado, mas tente ter uma idéia geral.

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html

dhi
fonte
leia cerca de 10 páginas da web, que dizem que PK pode conter mais de uma coluna. Então, como pode haver um e apenas um PK em uma tabela?
@android Uma PK com mais de uma coluna atua como uma única coluna em relação à exclusividade. No PostgreSQL, pelo menos, isso significa que uma nova coluna (com nome padrão [table_name]_pkey) é adicionada à tabela (eu ouvi isso chamado de chave substituta). Fonte: postgresqltutorial.com/postgresql-primary-key Eu sou novo nisso tudo, então eu apreciaria um pôster com mais conhecimento para apontar as nuances que eu perdi.
Poik
Ok, não é uma coluna. Eu li errado. É um contraint, não uma coluna. Ainda existe o índice clusterizado, mas tem mais de duas colunas em vez de uma. E cada coluna nela não é uma chave primária por si só, mas todo o conjunto é uma chave primária. Portanto, não há mais de um PK nesses casos.
Poik
46

Para uma organização ou empresa, existem muitas entidades físicas (como pessoas, recursos, máquinas, etc.) e entidades virtuais (suas tarefas, transações, atividades). Normalmente, os negócios precisam registrar e processar informações dessas entidades comerciais. Essas entidades comerciais são identificadas em um domínio comercial inteiro por uma Chave.

Conforme o RDBMS em potencial, Key (também conhecida como Chave do Candidato) é um valor ou conjunto de valores que identificam exclusivamente uma entidade.

Para uma tabela de banco de dados, existem tantas chaves que podem ser elegíveis para chave primária. Para que todas as chaves, chave primária, chave exclusiva, etc. sejam chamadas coletivamente como Chave de Candidato. No entanto, o DBA selecionou uma chave da chave candidata para pesquisar registros, chamada Chave Primária.

Diferença entre chave primária e chave exclusiva

1. Comportamento: Chave Primária é usada para identificar uma linha (registro) em uma tabela, enquanto Chave Única é para evitar valores duplicados em uma coluna (com exceção de uma entrada nula).

2. Indexação: Por padrão, o mecanismo SQL cria o Índice em Cluster na chave primária, se não existir, e o Índice Não em Cluster na Chave Exclusiva.

3. Nulabilidade: A chave primária não inclui valores nulos, enquanto a chave exclusiva pode.

4. Existência: uma tabela pode ter no máximo uma chave primária, mas pode ter várias chaves exclusivas.

5. Modificabilidade: você não pode alterar ou excluir valores primários, mas os valores de chave exclusiva podem.

Para mais informações e exemplos:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html

nayeemDotNetAuthorities
fonte
7
No quinto ponto, você diz que não podemos alterar ou excluir valores primários. com certeza podemos alterar os valores principais na tabela usando uma instrução de atualização.
quer
3
O @Kapil supera todo o propósito de usar uma chave primária.
Gokigooooks 23/01
2
índice agrupado: as linhas são armazenadas fisicamente no disco na mesma ordem que o índice
21418 Duy
26

Uma chave primária deve ser exclusiva.

Uma chave exclusiva não precisa ser a chave primária - veja a chave candidata .

Ou seja, pode haver mais de uma combinação de colunas em uma tabela que pode identificar exclusivamente uma linha - apenas uma delas pode ser selecionada como chave primária. Os outros, embora únicos, são chaves candidatas.

Oded
fonte
17

Diferença entre Chave Primária e Chave Única

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

Você pode encontrar informações detalhadas em:
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html

Omer K
fonte
16

Uma chave primária tem a semântica de identificação da linha de um banco de dados. Portanto, pode haver apenas uma chave primária para uma determinada tabela, enquanto pode haver muitas chaves exclusivas.

Também pelo mesmo motivo, uma chave primária não pode ser NULL (pelo menos no Oracle, não tenho certeza sobre outros bancos de dados)

Uma vez que identifica a linha, nunca deve mudar. A alteração das chaves primárias provavelmente causará graves dores e provavelmente condenação eterna.

Portanto, na maioria dos casos, você deseja algum ID artificial para chave primária que não seja usado para nada, mas para identificar linhas únicas na tabela.

As teclas exclusivas, por outro lado, podem mudar o quanto você desejar.

Jens Schauder
fonte
22
+1 por mencionar o risco de condenação eterna. É hora de introduzir a teologia na teoria de bancos de dados relacionais.
Neville Kuyt
PK também não pode ser NULL no SQL Server
mrd3650
7

Uma chave primária é uma chave exclusiva.

Cada tabela deve ter no máximo UMA chave primária, mas pode ter várias chaves exclusivas. Uma chave primária é usada para identificar exclusivamente uma linha da tabela. Uma chave primária não pode ser, NULLpois NULLnão é um valor.

Buhake Sindi
fonte
6
  • Pense que o nome da tabela é empregado.
  • Chave primária
  • A chave primária não pode aceitar valores nulos. chave primária aplica exclusividade de uma coluna. Podemos ter apenas uma chave primária em uma tabela.
  • Chave única
  • Chave exclusiva pode aceitar valores nulos. A chave exclusiva também impõe a exclusividade de uma coluna. Você pode pensar que se a chave exclusiva contiver valores nulos, por que ela pode ser única? sim, embora possa aceitar valores nulos, aplica a exclusividade de uma coluna. basta dar uma olhada na foto. o Emp_ID é primário e o Citizen ID é único. Eu espero que você entenda. Podemos usar várias chaves exclusivas em uma tabela. insira a descrição da imagem aqui
Mahedi Hasan Durjoy
fonte
1
não podemos inserir mais de um valor nulo na chave Unique e isso também não permitirá duplicatas.
Masum
@ mahedi-hasan A coluna de chave Unique não deve ter apenas um valor NULL? Como as duas últimas linhas do Citizen ID NULL? Estou faltando alguma coisa aqui?
Supernova
Acabei de receber resposta para o meu próprio comentário acima. Parece que o MySQL permite vários NULLs únicos também, assim como o @Mahedi_Hasan usou o MySQL. stackoverflow.com/questions/3712222/…
supernova
6

Sei que esta pergunta tem vários anos, mas gostaria de fornecer uma resposta para isso, explicando por que, e não como

Objetivo da chave primária : identificar uma linha em um banco de dados exclusivamente => Uma linha representa uma única instância do tipo de entidade modelada pela tabela. Uma chave primária reforça a integridade de uma entidade, AKA Entity Integrity. Chave Primária seria um índice em cluster, ou seja, define a ordem em que os dados são fisicamente armazenados em uma tabela.

Objetivo da chave exclusiva : Ok, com a chave primária, temos uma maneira de identificar exclusivamente uma linha. Mas eu tenho uma necessidade de negócios que, outra coluna / um conjunto de colunas deve ter valores únicos. Bem, tecnicamente, considerando que essas colunas são únicas, pode ser um candidato para reforçar a integridade da entidade. Mas, pelo que sabemos, esta coluna pode conter dados originários de uma organização externa que podem ter dúvidas sobre ser único. Posso não confiar nisso para fornecer integridade à entidade. Eu apenas a tornei uma chave exclusiva para atender aos meus requisitos de negócios.

Ai está!

Manuri Perera
fonte
1

Se o design do banco de dados for tal que não há necessidade de chave estrangeira, você poderá usar a chave Exclusiva ( mas lembre-se de que a chave exclusiva permite um valor nulo único ).

Se o seu banco de dados exige chave estrangeira, você sai sem opção, mas com a chave primária.

Para ver a diferença entre a chave única e a chave primária, visite aqui

user2903536
fonte
1

Chave exclusiva: - Deve ser usada quando você precisa fornecer um valor exclusivo. No caso de chave exclusiva, também são permitidos valores nulos. Chaves únicas são aquelas chaves únicas e não semelhantes nessa coluna, como por exemplo, seu nome de animal de estimação .it pode ser nada parecido com nulo e se você estiver perguntando no contexto do banco de dados, deve-se notar que cada nulo é diferente de outro nulo no banco de dados. EXCEPT-SQL Server em que null = null é verdadeiro


chave primária: - Ela deve ser usada quando você precisar identificar uma linha de maneira única. a chave primária que é única para cada linha em uma restrição de banco de dados é que ela não permite nulo nela. tem uma coluna que é incremento automático e é a chave principal da tabela. além disso, ele pode ser usado como uma chave estrangeira em outra tabela. o exemplo pode ser orderId em uma tabela de pedidos e billId em uma tabela de faturamento .

agora voltando à situação em que usá-lo: -

1) chave primária na coluna que não pode ser nula na tabela e você está usando como chave estrangeira em outra tabela para criar relacionamento

2) chave exclusiva na tabela onde isso não afeta na tabela ou no banco de dados inteiro, se você toma o nulo para uma coluna específica, como lanches no restaurante, é possível que você não tome lanches no restaurante

ayushs27
fonte
1

diferença entre chave primária e chave exclusiva

Ambos Primary keye Unique Keysão usados ​​para definir exclusivamente uma linha em uma tabela. Primary Keycria a clustered indexda coluna enquanto a Unique creates an unclustered index of the column.

A Primary Keynão permite NULL value, no entanto a Unique Key, permite one NULL value.

Gufran Hasan
fonte
0

A Chave Primária Simplesmente é única e não pode ser nula, única pode ser nula e pode não ser única.

Mohammed F. Ghazo
fonte
"unique pode ser nulo e pode não ser único". O que may not be uniquesignifica aqui?
Yusuf Hassan
0

Chaves Primárias

O principal objetivo da chave primária é fornecer um meio para identificar cada registro na tabela.

A chave primária fornece um meio de identificar a linha, usando dados dentro da linha. Uma chave primária pode ser baseada em uma ou mais colunas, como nome e sobrenome; no entanto, em muitos modelos, a chave primária é um número gerado automaticamente a partir de uma coluna de identidade.

Uma chave primária possui as seguintes características:

  1. Só pode haver uma chave primária para uma tabela.
  2. A chave primária consiste em uma ou mais colunas.
  3. A chave primária reforça a integridade da entidade da tabela.
  4. Todas as colunas definidas devem ser definidas como NOT NULL.
  5. A chave primária identifica exclusivamente uma linha.
  6. As chaves primárias resultam em índices exclusivos CLUSTERED por padrão.

Chaves exclusivas

Uma chave exclusiva também é chamada de restrição exclusiva. Uma restrição exclusiva pode ser usada para garantir que as linhas sejam exclusivas no banco de dados.

Já não fazemos isso com a chave primária? Sim, sim, mas uma tabela pode ter vários conjuntos de colunas que você deseja que sejam únicos.

No SQL Server, a chave exclusiva possui as seguintes características:

  1. Pode haver várias chaves exclusivas definidas em uma tabela.
  2. Chaves exclusivas resultam em índices exclusivos não exclusivos por padrão.
  3. Uma ou mais colunas compõem uma chave exclusiva.
  4. A coluna pode ser NULL, mas é permitido um NULL por coluna.
  5. Uma restrição exclusiva pode ser referenciada por uma restrição de chave estrangeira.

fonte: aqui

Manish Vadher
fonte
0

Os principais recursos de uma chave primária são:

Ele deve conter um valor exclusivo para cada linha de dados. Não pode conter valores nulos. Apenas uma chave primária em uma tabela.

Os principais recursos de uma chave exclusiva são:

Também pode conter um valor exclusivo para cada linha de dados.

Também pode conter valores nulos.

Várias chaves exclusivas em uma tabela.

Nischal Tyagi
fonte