Problem:
Du vill veta standardnamnen på begränsningar i SQL Server-databasen.
Exempel:
I vår databas skapar vi två tabeller, country
och student
, med följande begränsningar:PRIMARY KEY
(kolumnen id
i tabellerna country
och student
), FOREIGN KEY
(kolumnen country_id
i tabellen student
), DEFAULT
(kolumnen name
i tabellen student
), UNIQUE
(kolumnen name
i tabellen country
och kolumnen personal_number
i tabellen student
), och CHECK
(kolumnen age
i tabellen student
).
Lösning:
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) );
Låt oss visa hur SQL Server namnger begränsningarna för dessa tabeller som standard. Använd den här frågan för att se dem:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Här är resultatet:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
land | PRIMÄRNYCKEL | PK__country__3213E83F7EFD826D |
land | UNIKT | UQ__country__72E12F1BB69A1D8C |
student | PRIMÄRNYCKEL | PK__student__3213E83F357C7D1D |
student | UNIKT | UQ__student__24E2EDD2AC2A7D87 |
student | KONTROLLERA | CK__student__age__4E88ABD4 |
student | UTLANDSNYCKEL | FK__student__country__4F7CD00D |
Diskussion:
När vi skapar våra tabeller sätter vi begränsningar för vissa kolumner. Vi anger dock inte namnen för dessa begränsningar, så de namnges som standard. Hur genereras standardnamnen för begränsningar?
I SQL Server börjar standardnamnen med begränsningar med specifika prefix:PK
, UQ
, CK
, eller FK
.
Standardnamnet för en PRIMARY KEY
begränsning börjar med 'PK
’, följt av understreck (‘__
’), tabellnamnet, fler understreck (‘__
’), och ett hexadecimalt sekvensnummer genererat av SQL Server. I vårt exempel, PK__country__3213E83F7EFD826D
är standardnamnet för den primära nyckelbegränsningen i tabellen country
och PK__student__3213E83F357C7D1D
är standardnamnet för primärnyckelbegränsningen i tabellen student
.
Standardnamnet för en FOREIGN KEY
begränsning börjar med 'FK
’, följt av understreck (‘__
’), tabellnamnet, fler understreck (‘__
’), namnet på den relaterade tabellen och ett hexadecimalt sekvensnummer genererat av SQL Server. I vårt exempel, FK__student__country__4F7CD00D
är standardnamnet för den främmande nyckelbegränsningen i tabellen student
vilket motsvarar kolumnen id
i tabellen country
.
Standardnamnet för en UNIQUE
begränsningen är 'UQ
’, understryker (‘__
’), tabellnamnet, fler understreck (‘__
’), och ett hexadecimalt sekvensnummer genererat av SQL Server. I vårt exempel, UQ__country__72E12F1BB69A1D8C
är standardnamnet på den unika begränsningen för kolumnnamnet i tabellen country
, och UQ__student__24E2EDD2AC2A7D87
av UNIQUE
begränsning för kolumnnamnet för tabellen student
. UNIQUE
begränsningar med flera kolumner namnges i ett liknande mönster.
Standardnamnet för en CHECK
begränsningen är 'CK
’, understryker (‘__
’), tabellnamnet, fler understreck (‘__
’), kolumnnamnet, fler understreck (‘__’) och ett hexadecimalt sekvensnummer genererat av SQL Server. I vårt exempel, CK__student__age__4E88ABD4
är standardnamnet för CHECK
begränsning för kolumnen age
i tabellen student
.