sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan defineres en auto-inkrementer primær nøgle i SQL Server

I lighed med MySQL, PostgreSQL, Oracle og mange andre relationelle databaser, er SQL Server bedst udnyttet, når der tildeles unikke primærnøgler til de fleste databasetabeller.

Fordelene ved at bruge numeriske, automatisk inkrementerede primærnøgler er talrige, men de mest virkningsfulde fordele er hurtigere hastighed, når du udfører forespørgsler og datauafhængighed, når du søger gennem tusindvis af poster, som kan indeholde hyppigt ændrede data andre steder i tabellen. Med en ensartet og unik numerisk identifikator kan applikationer drage fordel af disse hurtigere og mere pålidelige forespørgsler.

Grundlæggende tabeloprettelse

Når du først er tilsluttet din SQL Server, vil du normalt starte med at CREATING en ny tabel, der indeholder det felt, du ønsker at bruge som din øgede primærnøgle. For vores eksempel holder vi os til det gennemprøvede id felt:

CREATE TABLE books (
  id              INT           NOT NULL,
  title           VARCHAR(100)  NOT NULL,
  primary_author  VARCHAR(100),
);

Problemet her er, at vi ikke har nogen måde at kontrollere vores id Mark. Når en ny post indsættes, skal vi ikke kun manuelt indtaste en værdi for id , men vi er nødt til at udføre en forespørgsel på forhånd for at forsøge at bekræfte det id værdi eksisterer ikke allerede (en næsten umulighed, når man har at gøre med mange samtidige forbindelser).

Brug af identitet og primære nøglebegrænsninger

Løsningen viser sig at bruge to begrænsningsmuligheder leveret af SQL Server.

Den første er PRIMARY KEY , hvilket som navnet antyder, tvinger den angivne kolonne til at opføre sig som et helt unikt indeks for tabellen, hvilket giver mulighed for hurtig søgning og forespørgsler.

Mens SQL Server kun tillader én PRIMARY KEY begrænsning tildelt til en enkelt tabel, den PRIMARY KEY kan defineres for mere end én kolonne. I et scenarie med flere kolonner kan individuelle kolonner indeholde duplikerede, ikke-unikke værdier, men PRIMARY KEY begrænsning sikrer, at hver kombination af begrænsede værdier vil faktisk være unikke i forhold til enhver anden kombination.

Den anden brik i puslespillet er IDENTITY begrænsning, som informerer SQL Server om automatisk at øge den numeriske værdi inden for den angivne kolonne, når en ny post er INSERTED . Mens IDENTITY kan accepter to argumenter for det numeriske seed hvor værdierne vil begynde fra samt increment , er disse værdier typisk ikke angivet med IDENTITY begrænsning og i stedet efterlades som standard (begge standard er 1). ).

Med denne nye viden lige ved hånden, kan vi omskrive vores tidligere CREATE TABLE erklæring ved at tilføje vores to nye begrænsninger.

CREATE TABLE books (
  id              INT           NOT NULL    IDENTITY    PRIMARY KEY,
  title           VARCHAR(100)  NOT NULL,
  primary_author  VARCHAR(100),
);

Det er alt, hvad der er til det. Nu id kolonne i vores books tabel vil automatisk blive forøget efter hver INSERT og id felt er garanteret også en unik værdi.


  1. Postgres unikke begrænsning vs indeks

  2. Udskiftning af mysql_*-funktioner med PDO og forberedte udsagn

  3. Løsning af PostgreSQL-opgraderingen

  4. SQL Server Process Queue Race Condition