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 .