Erstellen von Primärschlüsseln

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed Instance

Sie können in der SQL Server-Datenbank-Engine mit SQL Server Management Studio oder Transact-SQL einen Primärschlüssel definieren. Beim Erstellen eines Primärschlüssels wird automatisch ein zugehöriger eindeutiger gruppierter Index erstellt. Der Primärschlüssel kann jedoch stattdessen als nicht gruppierter Index angegeben werden.

Dieser Artikel erfordert die AdventureWorks2022-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.

Begrenzungen

Eine Tabelle kann nur eine PRIMARY KEY-Einschränkung enthalten.

Alle Spalten, für die eine PRIMARY KEY-Einschränkung definiert wurde, müssen als NOT NULL definiert sein. Falls keine NULL-Zulässigkeit angegeben ist, wird für alle Spalten, auf die eine PRIMARY KEY-Einschränkung angewendet wird, die NULL-Zulässigkeit auf NOT NULL festgelegt.

Berechtigungen

Zum Erstellen einer neuen Tabelle mit einem primären Schlüssel sind die CREATE TABLE-Berechtigung für die Datenbank und die ALTER-Berechtigung für das Schema erforderlich, in dem die Tabelle erstellt wird.

Zum Erstellen eines Primärschlüssels für eine vorhandene Tabelle ist die ALTER-Berechtigung für die Tabelle erforderlich.

Verwenden von SQL Server Management Studio

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle, der Sie eine eindeutige Einschränkung hinzufügen möchten, und klicken Sie auf Entwerfen.
  2. Wählen Sie im Tabellen-Designer den Zeilenselektor für die Datenbankspalte, die Sie als Primärschlüssel definieren möchten. Wenn Sie mehrere Spalten auswählen möchten, halten Sie STRG gedrückt, und wählen Sie die Zeilenselektoren für die anderen Spalten.
  3. Klicken Sie mit der rechten Maustaste auf den Zeilenselektor für die Spalte, und wählen Sie Primärschlüssel festlegenaus.

Achtung

Wenn Sie den Primärschlüssel neu definieren möchten, müssen Sie zunächst alle Beziehungen mit dem vorhandenen Primärschlüssel löschen, da erst dann der neue Primärschlüssel erstellt werden kann. In einer Warnmeldung werden Sie informiert, dass vorhandene Beziehungen bei diesem Prozess automatisch gelöscht werden.

Sie können eine Primärschlüsselspalte am Primärschlüsselsymbol erkennen, das im Zeilenselektor angezeigt wird.

Wenn ein Primärschlüssel aus mehreren Spalten besteht, können Werte in einer Spalte doppelt vorkommen. Die Kombination der Werte in allen Spalten des Primärschlüssels muss jedoch eindeutig sein.

Wenn Sie einen Verbundschlüssel definieren, stimmt die Spaltenreihenfolge im Primärschlüssel mit der Spaltenreihenfolge überein, die in der Tabelle angezeigt wird. Sie können die Spaltenreihenfolge jedoch nach Erstellen des Primärschlüssels ändern. Weitere Informationen finden Sie unter Ändern von Primärschlüsseln.

Verwenden von Transact-SQL

Erstellen eines Primärschlüssels in einer vorhandenen Tabelle

Im folgenden Beispiel wird ein Primärschlüssel für die Spalte TransactionID in der AdventureWorks2022-Datenbank erstellt.

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

Erstellen eines Primärschlüssels in einer neuen Tabelle

Im folgenden Beispiel wird eine Tabelle erstellt, und es wird ein Primärschlüssel für die Spalte TransactionID in der AdventureWorks2022-Datenbank definiert.

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

Erstellen eines nicht gruppierten Primärschlüssels mit einem separaten gruppierten Index in einer neuen Tabelle

Im folgenden Beispiel wird eine Tabelle in der AdventureWorks2022-Datenbank mit einem nicht gruppierten Primärschlüssel in der CustomerID-Spalte erstellt. Anschließend wird ein gruppierter Index auf TransactionID hinzugefügt.

  1. Erstellen Sie eine Tabelle, um den gruppierten Index hinzuzufügen.

    CREATE TABLE [Production].[TransactionHistoryArchive1] (
        CustomerID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
        TransactionID INT IDENTITY(1, 1) NOT NULL,
        CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID)
    );
    
  2. Fügen Sie nun den gruppierten Index hinzu.

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