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

Come definire una chiave primaria di incremento automatico in SQL Server

Simile a MySQL, PostgreSQL, Oracle e molti altri database relazionali, SQL Server viene utilizzato al meglio quando si assegnano chiavi primarie univoche alla maggior parte delle tabelle di database.

I vantaggi dell'utilizzo di chiavi primarie numeriche a incremento automatico sono numerosi, ma i vantaggi più influenti sono una maggiore velocità durante l'esecuzione di query e l'indipendenza dai dati durante la ricerca tra migliaia di record che potrebbero contenere dati modificati di frequente in altre parti della tabella. Con un identificatore numerico coerente e univoco, le applicazioni possono trarre vantaggio da queste query più rapide e affidabili.

Creazione di tabelle di base

Una volta connesso al tuo SQL Server, normalmente inizieresti con CREATING una nuova tabella che contiene il campo che desideri utilizzare come chiave primaria incrementata. Per il nostro esempio, continueremo con il collaudato id campo:

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

Il problema qui è che non abbiamo modo di controllare il nostro id campo. Quando viene inserito un nuovo record, non solo dobbiamo inserire manualmente un valore per id , ma dobbiamo eseguire una query in anticipo per tentare di verificare quell'id il valore non esiste già (una quasi impossibile quando si ha a che fare con molte connessioni simultanee).

Utilizzo di identità e vincoli di chiave primaria

La soluzione risulta utilizzare due opzioni di vincolo fornite da SQL Server.

Il primo è PRIMARY KEY , che, come suggerisce il nome, forza la colonna specificata a comportarsi come un indice completamente univoco per la tabella, consentendo ricerche e query rapide.

Mentre SQL Server consente solo una PRIMARY KEY vincolo assegnato ad una singola tabella, quella PRIMARY KEY può essere definito per più di una colonna. In uno scenario a più colonne, le singole colonne possono contenere valori duplicati e non univoci, ma la PRIMARY KEY vincolo assicura che ogni combinazione di valori vincolati sarà infatti univoco rispetto a ogni altra combinazione.

Il secondo pezzo del puzzle è l'IDENTITY vincolo, che informa SQL Server di incrementare automaticamente il valore numerico all'interno della colonna specificata ogni volta che un nuovo record è INSERTED . Mentre IDENTITY può accetta due argomenti del seed numerico da dove inizieranno i valori e l'increment , questi valori in genere non sono specificati con IDENTITY vincolo e invece vengono lasciati come predefiniti (entrambi predefiniti su 1 ).

Con questa nuova conoscenza a portata di mano, possiamo riscrivere il nostro precedente CREATE TABLE dichiarazione aggiungendo i nostri due nuovi vincoli.

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

Questo è tutto ciò che c'è da fare. Ora l'id colonna dei nostri books la tabella verrà incrementata automaticamente ad ogni INSERT e l'id è garantito che anche il campo sia un valore univoco.