sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man definierar en primärnyckel för automatisk ökning i SQL Server

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å.


  1. Skillnaden i månader mellan datum i MySQL

  2. Splitting Strings:En uppföljning

  3. Hur kan jag importera en .sql-fil till min Heroku postgres-databas?

  4. Vad är sekventiella kontra parallella strömmar i Java?