Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

MySQL - Significado de PRIMARY KEY, UNIQUE KEY e KEY quando usados ​​juntos ao criar uma tabela


Uma chave é apenas um índice normal. Uma maneira de simplificar é pensar nisso como um catálogo de fichas em uma biblioteca. Ele aponta o MySQL na direção certa.

Uma chave exclusiva também é usada para melhorar a velocidade de busca, mas tem a restrição de que não pode haver itens duplicados (não há dois x e y onde x não é y e x ==y).

O manual explica assim:

Um índice UNIQUE cria uma restrição tal que todos os valores no índice devem ser distintos. Ocorre um erro se você tentar adicionar uma nova linha com um valor de chave que corresponda a uma linha existente. Essa restrição não se aplica a valores NULL, exceto para o mecanismo de armazenamento BDB. Para outros mecanismos, um índice UNIQUE permite vários valores NULL para colunas que podem conter NULL. Se você especificar um valor de prefixo para uma coluna em um índice UNIQUE, os valores da coluna deverão ser exclusivos dentro do prefixo.

Uma chave primária é uma chave exclusiva 'especial'. Basicamente, é uma chave única, exceto que é usada para identificar algo.

O manual explica como os índices são usados ​​em geral:aqui.

No MSSQL, os conceitos são semelhantes. Existem índices, restrições exclusivas e chaves primárias.

Não testado, mas acredito que o equivalente do MSSQL seja:
CREATE TABLE tmp (
  id int NOT NULL PRIMARY KEY IDENTITY,
  uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
  name varchar(255) NOT NULL,
  tag int NOT NULL DEFAULT 0,
  description varchar(255),
);

CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);

Edit:o código acima é testado para estar correto; no entanto, suspeito que haja uma sintaxe muito melhor para fazer isso. Já faz um tempo desde que eu usei o SQL Server, e aparentemente eu esqueci um pouco :).