Créer des clés primaires

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed Instance

Vous pouvez définir une clé primaire dans le moteur de base de données SQL Server à l'aide de SQL Server Management Studio ou de Transact-SQL. La création d'une clé primaire entraîne automatiquement la création d'un index cluster unique correspondant. Toutefois, votre clé primaire peut être spécifiée en tant qu’index non cluster à la place.

Cet article requiert l'échantillon de base de données AdventureWorks, que vous pouvez télécharger à partir de la page d'accueil des AdventureWorks2022échantillons et Projects de communautés Microsoft SQL Server.

Limites

Une table ne peut contenir qu'une seule contrainte PRIMARY KEY.

Toutes les colonnes définies dans une contrainte PRIMARY KEY doivent avoir la valeur NOT NULL. Si la nullité n'est pas spécifiée, toutes les colonnes participant à une contrainte PRIMARY KEY ont leur nullité fixée à NOT NULL.

Autorisations

La création d'une nouvelle table avec une clé primaire nécessite une autorisation CREATE TABLE dans la base de données et une autorisation ALTER pour le schéma dans lequel la table a été créée.

La création d'une clé primaire dans une table existante nécessite l'autorisation ALTER sur la table.

Utiliser SQL Server Management Studio

  1. Dans l’Explorateur d’objets, cliquez avec le bouton droit sur la table à laquelle vous souhaitez ajouter une contrainte unique, puis sélectionnez Conception.
  2. Dans le Concepteur de tables, sélectionnez le sélecteur de ligne correspondant à la colonne de base de données que vous voulez définir comme clé primaire. Si vous voulez sélectionner plusieurs colonnes, appuyez sur la touche CTRL et, tout en la maintenant enfoncée, sélectionnez les sélecteurs de ligne des autres colonnes.
  3. Cliquez avec le bouton droit sur le sélecteur de ligne de la colonne et cliquez sur Définir la clé primaire.

Attention

Si vous voulez redéfinir la clé primaire, vous devez supprimer toutes les relations avec la clé primaire existante avant de pouvoir créer la nouvelle clé primaire. Un message vous avertira que les relations existantes seront automatiquement supprimées dans le cadre de ce processus.

Une colonne clé primaire est identifiée par un symbole de clé primaire dans son sélecteur de ligne.

Si une clé primaire comporte plusieurs colonnes, les doublons sont autorisés dans une colonne, mais chaque combinaison de valeurs provenant de toutes les colonnes de la clé primaire doit être unique.

Si vous définissez une clé composée, l'ordre des colonnes dans la clé primaire correspond à l'ordre des colonnes de la table. Vous pouvez cependant modifier l'ordre des colonnes après la création de la clé primaire. Pour plus d’informations, consultez Modifier des clés primaires.

Utiliser Transact-SQL

Créer une clé primaire dans une table existante

L'exemple suivant crée une clé primaire sur la colonne TransactionID dans la base de données AdventureWorks2022.

ALTER TABLE [Production].[TransactionHistoryArchive]
   ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);

Créer une clé primaire dans une nouvelle table

L'exemple suivant crée une table et définit une clé primaire sur la colonne TransactionID dans la base de données AdventureWorks2022.

CREATE TABLE [Production].[TransactionHistoryArchive1] (
    TransactionID INT IDENTITY(1, 1) NOT NULL,
    CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
);

Créer une clé primaire non clusterisée avec un index cluster séparé dans une nouvelle table

L'exemple suivant crée une table dans la base de données AdventureWorks2022, avec une clé primaire non groupée sur la colonne CustomerID. Ensuite, il ajoute un index cluster sur TransactionID.

  1. Créer une table pour ajouter l’index cluster.

    CREATE TABLE [Production].[TransactionHistoryArchive1] (
        CustomerID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
        TransactionID INT IDENTITY(1, 1) NOT NULL,
        CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID)
    );
    
  2. Ajouter maintenant l’index cluster.

    CREATE CLUSTERED INDEX CIX_TransactionID
    ON [Production].[TransactionHistoryArchive1] (TransactionID);