Udostępnij za pośrednictwem


Tworzenie kluczy podstawowych

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric

Klucz podstawowy można zdefiniować w aparacie silnika bazy danych SQL Server, używając programu SQL Server Management Studio lub języka Transact-SQL. Utworzenie klucza podstawowego powoduje automatyczne utworzenie odpowiedniego unikatowego indeksu klastrowanego. Klucz podstawowy można jednak określić jako indeks nieklastrowany.

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022 lub AdventureWorksDW2022, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

Ograniczenia

Tabela może zawierać tylko jedno ograniczenie PRIMARY KEY.

Wszystkie kolumny zdefiniowane w ramach ograniczenia PRIMARY KEY muszą być zdefiniowane jako NOT NULL. Jeśli nie określono wartości null, wszystkie kolumny uczestniczące w ograniczeniu PRIMARY KEY mają ustawioną wartość null na wartość NOT NULL.

Uprawnienia

Utworzenie nowej tabeli z kluczem podstawowym wymaga uprawnień CREATE TABLE w bazie danych i ALTER uprawnienia do schematu, w którym jest tworzona tabela.

Utworzenie klucza podstawowego w istniejącej tabeli wymaga posiadania uprawnień ALTER do tabeli.

Korzystanie z programu SQL Server Management Studio

  1. W Eksploratorze obiektów kliknij prawym przyciskiem myszy tabelę, do której chcesz dodać unikatowe ograniczenie, a następnie wybierz pozycję Design.
  2. W Projektant tabelwybierz selektor wierszy dla kolumny bazy danych, którą chcesz zdefiniować jako klucz podstawowy. Jeśli chcesz wybrać wiele kolumn, przytrzymaj wciśnięty CTRL podczas wybierania selektorów wierszy dla innych kolumn.
  3. Kliknij prawym przyciskiem myszy selektor wierszy dla kolumny i wybierz pozycję Ustaw klucz podstawowy.

Ostrożność

Jeśli chcesz ponownie zdefiniować klucz podstawowy, przed utworzeniem nowego klucza podstawowego należy usunąć wszystkie relacje z istniejącym kluczem podstawowym. Zostanie wyświetlony komunikat z ostrzeżeniem, że istniejące relacje zostaną automatycznie usunięte w ramach tego procesu.

Kolumna klucza podstawowego jest identyfikowana przez symbol klucza podstawowego w selektorze wierszy.

Jeśli klucz podstawowy składa się z więcej niż jednej kolumny, zduplikowane wartości są dozwolone w jednej kolumnie, ale każda kombinacja wartości ze wszystkich kolumn w kluczu podstawowym musi być unikatowa.

Jeśli zdefiniujesz klucz złożony, kolejność kolumn w kluczu podstawowym jest zgodna z kolejnością kolumn, jak pokazano w tabeli. Można jednak zmienić kolejność kolumn po utworzeniu klucza podstawowego. Aby uzyskać więcej informacji, zobacz Modyfikowanie kluczy podstawowych.

Użyj Transact-SQL

Tworzenie klucza podstawowego w istniejącej tabeli

Poniższy przykład tworzy klucz podstawowy w kolumnie TransactionID w bazie danych AdventureWorks2022.

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

Tworzenie klucza podstawowego w nowej tabeli

Poniższy przykład tworzy tabelę i definiuje klucz podstawowy w kolumnie TransactionID w bazie danych AdventureWorks2022.

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

Tworzenie nieklastrowanego klucza podstawowego z oddzielnym indeksem klastrowanym w nowej tabeli

Poniższy przykład tworzy tabelę w bazie danych AdventureWorks2022 z nieklastrowym kluczem podstawowym w kolumnie CustomerID. Następnie dodaje indeks klastrowany w TransactionID.

  1. Utwórz tabelę, aby dodać indeks klastrowany.

    CREATE TABLE [Production].[TransactionHistoryArchive1] (
        CustomerID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
        TransactionID INT IDENTITY(1, 1) NOT NULL,
        CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID)
    );
    
  2. Teraz dodaj indeks klastrowany.

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