Проблем:
Искате да знаете имената по подразбиране на ограниченията в базата данни на SQL Server.
Пример:
В нашата база данни създаваме две таблици, country
и student
, със следните ограничения:PRIMARY KEY
(колоната id
в таблиците country
и student
), FOREIGN KEY
(колоната country_id
в таблицата student
), DEFAULT
(колоната name
в таблицата student
), UNIQUE
(колоната name
в таблицата country
и колоната personal_number
в таблицата student
) и CHECK
(колоната age
в таблицата student
).
Решение:
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) );
Нека покажем как SQL Server наименува ограниченията на тези таблици по подразбиране. Използвайте тази заявка, за да ги видите:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Ето резултата:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
държава | ПЪРВИЧЕН КЛЮЧ | PK__country__3213E83F7EFD826D |
държава | УНИКАЛНО | UQ__country__72E12F1BB69A1D8C |
ученик | ПЪРВИЧЕН КЛЮЧ | PK__student__3213E83F357C7D1D |
ученик | УНИКАЛНО | UQ__student__24E2EDD2AC2A7D87 |
ученик | ПРОВЕРКА | CK__student__age__4E88ABD4 |
ученик | ВЪНШЕН КЛЮЧ | FK__student__country__4F7CD00D |
Дискусия:
Когато създаваме нашите таблици, ние задаваме ограничения за някои колони. Въпреки това, ние не уточняваме имената на тези ограничения, така че те са наименувани по подразбиране. Как се генерират имената по подразбиране за ограничения?
В SQL Server имената на ограниченията по подразбиране започват със специфични префикси:PK
, UQ
, CK
, или FK
.
Името по подразбиране за PRIMARY KEY
ограничението започва с „PK
“, последвано от долни черти („__
“), името на таблицата, още долни черти (‘__
’) и шестнадесетичен пореден номер, генериран от SQL Server. В нашия пример PK__country__3213E83F7EFD826D
е името по подразбиране за ограничението на първичния ключ в таблицата country
и PK__student__3213E83F357C7D1D
е името по подразбиране за ограничението на първичния ключ в таблицата student
.
Името по подразбиране за FOREIGN KEY
ограничението започва с „FK
“, последвано от долни черти („__
“), името на таблицата, още долни черти (‘__
’), името на свързаната таблица и шестнадесетичен пореден номер, генериран от SQL Server. В нашия пример FK__student__country__4F7CD00D
е името по подразбиране за ограничението за външен ключ в таблицата student
което е еквивалентно на колоната id
в таблицата country
.
Името по подразбиране за UNIQUE
ограничението е „UQ
“, подчертава („__
“), името на таблицата, още долни черти (‘__
’) и шестнадесетичен пореден номер, генериран от SQL Server. В нашия пример UQ__country__72E12F1BB69A1D8C
е името по подразбиране на уникалното ограничение за името на колоната в таблицата country
и UQ__student__24E2EDD2AC2A7D87
на UNIQUE
ограничение за името на колоната на таблицата student
. UNIQUE
ограниченията с множество колони се именуват по подобен модел.
Името по подразбиране за CHECK
ограничението е „CK
“, подчертава („__
“), името на таблицата, още долни черти (‘__
“), името на колоната, още долни черти („__“) и шестнадесетичен пореден номер, генериран от SQL Server. В нашия пример, CK__student__age__4E88ABD4
е името по подразбиране за CHECK
ограничение за колоната age
на таблицата student
.