Primaire sleutels maken
Van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric
U kunt een primaire sleutel definiëren in de SQL Server Database Engine met behulp van SQL Server Management Studio of Transact-SQL. Als u een primaire sleutel maakt, wordt automatisch een bijbehorende unieke geclusterde index gemaakt. Uw primaire sleutel kan echter worden opgegeven als een niet-geclusterde index.
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022
of AdventureWorksDW2022
voorbeelddatabase, die u kunt downloaden van de Microsoft SQL Server-voorbeelden en communityprojecten startpagina.
Beperkingen
Een tabel kan slechts één PRIMARY KEY
beperking bevatten.
Alle kolommen die binnen een PRIMARY KEY
beperking zijn gedefinieerd, moeten worden gedefinieerd als NOT NULL
. Als de null-waarde niet is opgegeven, zijn voor alle kolommen die deelnemen aan een PRIMARY KEY
beperking de null-waarde ingesteld op NOT NULL
.
Machtigingen
Voor het maken van een nieuwe tabel met een primaire sleutel is CREATE TABLE
machtiging in de database vereist en ALTER
machtiging voor het schema waarin de tabel wordt gemaakt.
Voor het maken van een primaire sleutel in een bestaande tabel is ALTER
machtiging voor de tabel vereist.
SQL Server Management Studio gebruiken
- Klik in Objectverkenner met de rechtermuisknop op de tabel waaraan u een unieke beperking wilt toevoegen en selecteer Ontwerp.
- Selecteer in Table Designerde rijselectie voor de databasekolom die u als primaire sleutel wilt definiëren. Als u meerdere kolommen wilt selecteren, houdt u Ctrl ingedrukt terwijl u de kolomkiezers voor de andere kolommen selecteert.
- Klik met de rechtermuisknop op de rijkiezer voor de kolom en selecteer Primaire sleutel instellen.
Voorzichtigheid
Als u de primaire sleutel opnieuw wilt definiëren, moeten relaties met de bestaande primaire sleutel worden verwijderd voordat de nieuwe primaire sleutel kan worden gemaakt. Een bericht waarschuwt u dat bestaande relaties automatisch worden verwijderd als onderdeel van dit proces.
Een primaire sleutelkolom wordt geïdentificeerd door een primaire sleutelsymbool in de rijselecteerder.
Als een primaire sleutel uit meer dan één kolom bestaat, zijn dubbele waarden toegestaan in één kolom, maar elke combinatie van waarden uit alle kolommen in de primaire sleutel moet uniek zijn.
Als u een samengestelde sleutel definieert, komt de volgorde van kolommen in de primaire sleutel overeen met de volgorde van kolommen, zoals wordt weergegeven in de tabel. U kunt echter de volgorde van kolommen wijzigen nadat de primaire sleutel is gemaakt. Voor meer informatie, zie Primaire sleutels wijzigen.
Gebruik Transact-SQL
Een primaire sleutel maken in een bestaande tabel
In het volgende voorbeeld wordt een primaire sleutel gemaakt in de kolom TransactionID
in de AdventureWorks2022
-database.
ALTER TABLE [Production].[TransactionHistoryArchive]
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);
Een primaire sleutel maken in een nieuwe tabel
In het volgende voorbeeld wordt een tabel gemaakt en wordt een primaire sleutel gedefinieerd in de kolom TransactionID
in de AdventureWorks2022
-database.
CREATE TABLE [Production].[TransactionHistoryArchive1] (
TransactionID INT IDENTITY(1, 1) NOT NULL,
CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
);
Een niet-geclusterde primaire sleutel maken met afzonderlijke geclusterde index in een nieuwe tabel
In het volgende voorbeeld wordt een tabel gemaakt in de AdventureWorks2022
-database, met een niet-geclusterde primaire sleutel op de kolom CustomerID
. Vervolgens wordt er een geclusterde index toegevoegd aan TransactionID
.
Maak een tabel om de geclusterde index toe te voegen.
CREATE TABLE [Production].[TransactionHistoryArchive1] ( CustomerID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(), TransactionID INT IDENTITY(1, 1) NOT NULL, CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID) );
Voeg nu de geclusterde index toe.
CREATE CLUSTERED INDEX CIX_TransactionID ON [Production].[TransactionHistoryArchive1] (TransactionID);