Problem:
Chcesz poznać domyślne nazwy ograniczeń w bazie danych SQL Server.
Przykład:
W naszej bazie danych tworzymy dwie tabele, country
i student
, z następującymi ograniczeniami:PRIMARY KEY
(kolumna id
w tabelach country
i student
), FOREIGN KEY
(kolumna country_id
w tabeli student
), DEFAULT
(kolumna name
w tabeli student
), UNIQUE
(kolumna name
w tabeli country
i kolumna personal_number
w tabeli student
) i CHECK
(kolumna age
w tabeli student
).
Rozwiązanie:
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) );
Pokażmy, jak SQL Server domyślnie nazywa ograniczenia tych tabel. Użyj tego zapytania, aby je zobaczyć:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Oto wynik:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
kraj | KLUCZ PODSTAWOWY | PK__country__3213E83F7EFD826D |
kraj | UNIKALNE | UQ__country__72E12F1BB69A1D8C |
uczeń | KLUCZ PODSTAWOWY | PK__student__3213E83F357C7D1D |
uczeń | UNIKALNE | UQ__student__24E2EDD2AC2A7D87 |
uczeń | SPRAWDŹ | CK__student__wiek__4E88ABD4 |
uczeń | KLUCZ OBCY | FK__student__country__4F7CD00D |
Dyskusja:
Kiedy tworzymy nasze tabele, ustawiamy ograniczenia dla niektórych kolumn. Jednak nie określamy nazw dla tych ograniczeń, więc są one nazwane domyślnie. Jak generowane są domyślne nazwy ograniczeń?
W SQL Server domyślne nazwy ograniczeń zaczynają się od określonych przedrostków:PK
, UQ
, CK
lub FK
.
Domyślna nazwa PRIMARY KEY
ograniczenie zaczyna się od „PK
”, po którym następuje podkreślenie („__
’), nazwa tabeli, więcej podkreśleń („__
’) oraz szesnastkowy numer sekwencyjny wygenerowany przez program SQL Server. W naszym przykładzie PK__country__3213E83F7EFD826D
to domyślna nazwa ograniczenia klucza podstawowego w tabeli country
i PK__student__3213E83F357C7D1D
to domyślna nazwa ograniczenia klucza podstawowego w tabeli student
.
Domyślna nazwa FOREIGN KEY
ograniczenie zaczyna się od „FK
”, po którym następuje podkreślenie („__
’), nazwa tabeli, więcej podkreśleń („__
’), nazwę powiązanej tabeli oraz szesnastkowy numer sekwencyjny wygenerowany przez program SQL Server. W naszym przykładzie FK__student__country__4F7CD00D
to domyślna nazwa ograniczenia klucza obcego w tabeli student
która jest odpowiednikiem kolumny id
w tabeli country
.
Domyślna nazwa dla UNIQUE
ograniczenie to „UQ
’, podkreślenia (‘__
’), nazwa tabeli, więcej podkreśleń („__
’) oraz szesnastkowy numer sekwencyjny wygenerowany przez program SQL Server. W naszym przykładzie UQ__country__72E12F1BB69A1D8C
to domyślna nazwa ograniczenia przez unikalność dla nazwy kolumny w tabeli country
i UQ__student__24E2EDD2AC2A7D87
UNIQUE
ograniczenie dla nazwy kolumny tabeli student
. UNIQUE
ograniczenia z wieloma kolumnami są nazywane w podobny sposób.
Domyślna nazwa dla CHECK
ograniczenie to „CK
’, podkreślenia (‘__
’), nazwa tabeli, więcej podkreśleń („__
”), nazwę kolumny, więcej podkreśleń („__”) i szesnastkowy numer sekwencyjny wygenerowany przez SQL Server. W naszym przykładzie CK__student__age__4E88ABD4
jest domyślną nazwą dla CHECK
ograniczenie dla kolumny age
tabeli student
.