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

Qual è il nome del vincolo predefinito in SQL Server?

Problema:

Vuoi conoscere i nomi predefiniti dei vincoli nel database di SQL Server.

Esempio:

Nel nostro database creiamo due tabelle, country e student , con i seguenti vincoli:PRIMARY KEY (la colonna id nelle tabelle country e student ), FOREIGN KEY (la colonna country_id nella tabella student ), DEFAULT (la colonna name nella tabella student ), UNIQUE (la colonna name nella tabella country e la colonna personal_number nella tabella student ), e CHECK (la colonna age nella tabella student ).

Soluzione:

CREATE TABLE country (
id int NOT NULL primary key,
name varchar(100) UNIQUE
);

CREATE TABLE student (
id int NOT NULL primary key,
name varchar(100) NOT NULL DEFAULT 'unknown',
personal_number varchar(100) UNIQUE,
age int CHECK(age>15),
country_id int FOREIGN KEY references country(id)
);

Mostriamo come SQL Server denomina i vincoli di queste tabelle per impostazione predefinita. Usa questa query per vederli:

SELECT TABLE_CATALOG, TABLE_NAME,
       CONSTRAINT_TYPE,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Ecco il risultato:

TABLE_NAME TIPO_VINCENTE CONSTRAINT_NAME
paese CHIAVE PRIMARIA PK__paese__3213E83F7EFD826D
paese UNICO UQ__paese__72E12F1BB69A1D8C
studente CHIAVE PRIMARIA PK__studente__3213E83F357C7D1D
studente UNICO UQ__studente__24E2EDD2AC2A7D87
studente CONTROLLA CK__student__age__4E88ABD4
studente CHIAVE ESTERA FK__student__country__4F7CD00D

Discussione:

Quando creiamo le nostre tabelle, impostiamo dei vincoli per alcune colonne. Tuttavia, non specifichiamo i nomi per questi vincoli, quindi sono denominati per impostazione predefinita. Come vengono generati i nomi predefiniti per i vincoli?

In SQL Server, i nomi dei vincoli predefiniti iniziano con prefissi specifici:PK , UQ , CK o FK .

Il nome predefinito per una PRIMARY KEY il vincolo inizia con "PK ', seguito da trattini bassi ('__ '), il nome della tabella, più trattini bassi ('__ ') e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, PK__country__3213E83F7EFD826D è il nome predefinito per il vincolo della chiave primaria nella tabella country e PK__student__3213E83F357C7D1D è il nome predefinito per il vincolo della chiave primaria nella tabella student .

Il nome predefinito per una FOREIGN KEY il vincolo inizia con "FK ', seguito da trattini bassi ('__ '), il nome della tabella, più trattini bassi ('__ '), il nome della tabella correlata e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, FK__student__country__4F7CD00D è il nome predefinito per il vincolo di chiave esterna nella tabella student che è equivalente alla colonna id nella tabella country .

Il nome predefinito per un UNIQUE il vincolo è "UQ ', sottolinea ('__ '), il nome della tabella, più trattini bassi ('__ ') e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, UQ__country__72E12F1BB69A1D8C è il nome predefinito del vincolo univoco per il nome della colonna nella tabella country e UQ__student__24E2EDD2AC2A7D87 del UNIQUE vincolo per il nome della colonna della tabella student . UNIQUE i vincoli con più colonne sono denominati in uno schema simile.

Il nome predefinito per un CHECK il vincolo è 'CK ', sottolinea ('__ '), il nome della tabella, più trattini bassi ('__ '), il nome della colonna, più caratteri di sottolineatura ('__') e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, CK__student__age__4E88ABD4 è il nome predefinito per CHECK vincolo per la colonna age della tabella student .