Criar chaves primárias
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada SQL do Azurebanco de dados SQL no Microsoft Fabric
Você pode definir uma chave primária no Mecanismo de Banco de Dados do SQL Server usando o SQL Server Management Studio ou o Transact-SQL. A criação de uma chave primária cria automaticamente um índice clusterizado exclusivo correspondente. No entanto, sua chave primária pode ser especificada como um índice não clusterizado.
Os exemplos de código neste artigo utilizam a base de dados de amostra AdventureWorks2022
ou AdventureWorksDW2022
, que pode descarregar da página inicial de Exemplos e Projetos Comunitários do Microsoft SQL Server.
Limitações
Uma tabela pode conter apenas uma restrição de PRIMARY KEY
.
Todas as colunas definidas dentro de uma restrição de PRIMARY KEY
devem ser definidas como NOT NULL
. Se a anulabilidade não for especificada, todas as colunas que participam de uma restrição de PRIMARY KEY
terão sua anulabilidade definida como NOT NULL
.
Permissões
Criar uma nova tabela com uma chave primária requer CREATE TABLE
permissão no banco de dados e ALTER
permissão no esquema no qual a tabela está sendo criada.
Inserir uma chave primária numa tabela já existente requer permissão ALTER
sobre a tabela.
Usar o SQL Server Management Studio
- No Pesquisador de Objetos, clique com o botão direito do mouse na tabela à qual você deseja adicionar uma restrição exclusiva e selecione Design.
- No Designer de Tabela, selecione o seletor de linha para a coluna do banco de dados que você deseja definir como a chave primária. Se quiser selecionar várias colunas, mantenha pressionada a tecla CTRL enquanto seleciona os seletores de linha para as outras colunas.
- Clique com o botão direito do mouse no seletor de linha da coluna e selecione Definir chave primária.
Atenção
Se você quiser redefinir a chave primária, quaisquer relações com a chave primária existente devem ser excluídas antes que a nova chave primária possa ser criada. Uma mensagem avisará que as relações existentes serão automaticamente excluídas como parte desse processo.
Uma coluna de chave primária é identificada por um símbolo de chave primária no seu seletor de linha.
Se uma chave primária consistir em mais de uma coluna, valores duplicados serão permitidos em uma coluna, mas cada combinação de valores de todas as colunas na chave primária deverá ser exclusiva.
Se você definir uma chave composta, a ordem das colunas na chave primária corresponderá à ordem das colunas, conforme mostrado na tabela. No entanto, você pode alterar a ordem das colunas depois que a chave primária é criada. Para obter mais informações, consulte Modificar chaves primárias.
Use Transact-SQL
Criar uma chave primária em uma tabela existente
O exemplo a seguir cria uma chave primária na coluna TransactionID
no banco de dados AdventureWorks2022
.
ALTER TABLE [Production].[TransactionHistoryArchive]
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);
Criar uma chave primária em uma nova tabela
O exemplo a seguir cria uma tabela e define uma chave primária na coluna TransactionID
no banco de dados AdventureWorks2022
.
CREATE TABLE [Production].[TransactionHistoryArchive1] (
TransactionID INT IDENTITY(1, 1) NOT NULL,
CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
);
Criar uma chave primária não clusterizada com índice clusterizado separado em uma nova tabela
O exemplo a seguir cria uma tabela no banco de dados AdventureWorks2022
, com uma chave primária não clusterizada na coluna CustomerID
. Em seguida, ele adiciona um índice clusterizado em TransactionID
.
Crie uma tabela para adicionar o índice clusterizado.
CREATE TABLE [Production].[TransactionHistoryArchive1] ( CustomerID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(), TransactionID INT IDENTITY(1, 1) NOT NULL, CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID) );
Agora adicione o índice clusterizado.
CREATE CLUSTERED INDEX CIX_TransactionID ON [Production].[TransactionHistoryArchive1] (TransactionID);