I likhet med MySQL, PostgreSQL, Oracle och många andra relationsdatabaser, används SQL Server bäst när man tilldelar unika primärnycklar till de flesta databastabeller.
Fördelarna med att använda numeriska, automatiskt inkrementerade primärnycklar är många, men de mest effektiva fördelarna är snabbare hastighet när du utför frågor och dataoberoende när du söker igenom tusentals poster som kan innehålla ofta ändrade data någon annanstans i tabellen. Med en konsekvent och unik numerisk identifierare kan applikationer dra fördel av dessa snabbare och mer tillförlitliga frågor.
Grundläggande tabellskapande
När du väl är ansluten till din SQL Server börjar du normalt med att CREATING
en ny tabell som innehåller fältet du vill använda som din inkrementerade primärnyckel. För vårt exempel kommer vi att hålla fast vid det beprövade id
fält:
CREATE TABLE books (
id INT NOT NULL,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
Problemet här är att vi inte har något sätt att kontrollera vårt id
fält. När en ny post infogas måste vi inte bara manuellt ange ett värde för id
, men vi måste utföra en fråga i förväg för att försöka verifiera det id
värde existerar inte redan (en nästan omöjlighet när man hanterar många samtidiga anslutningar).
Använda identitets- och primära nyckelbegränsningar
Lösningen visar sig använda två begränsningsalternativ från SQL Server.
Den första är PRIMARY KEY
, vilket som namnet antyder tvingar den angivna kolumnen att fungera som ett helt unikt index för tabellen, vilket möjliggör snabb sökning och frågor.
Medan SQL Server bara tillåter en PRIMARY KEY
begränsning tilldelad till en enda tabell, den PRIMARY KEY
kan definieras för mer än en kolumn. I ett scenario med flera kolumner kan enskilda kolumner innehålla dubbletter, icke-unika värden, men PRIMARY KEY
begränsning säkerställer att varje kombination av begränsade värden kommer i själva verket att vara unika i förhållande till alla andra kombinationer.
Den andra pusselbiten är IDENTITY
begränsning, som informerar SQL Server att automatiskt öka det numeriska värdet inom den angivna kolumnen när en ny post INSERTED
. Medan IDENTITY
kan acceptera två argument för det numeriska seed
varifrån värdena börjar liksom increment
, dessa värden anges vanligtvis inte med IDENTITY
begränsning och istället lämnas som standardvärden (båda är standard till 1
). ).
Med denna nya kunskap till hands kan vi skriva om vår tidigare CREATE TABLE
uttalande genom att lägga till våra två nya begränsningar.
CREATE TABLE books (
id INT NOT NULL IDENTITY PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
Det är allt som finns. Nu är id
kolumn i våra books
Tabellen kommer automatiskt att ökas vid varje INSERT
och id
fältet är garanterat ett unikt värde också.