Проблем:
Искате да знаете имената по подразбиране на ограниченията в таблица в MySQL.
Пример:
В нашата база данни създаваме две таблици, country
и student
, със следните ограничения:PRIMARY KEY constraint
(идентификаторът на колоната в таблиците country
и student
), FOREIGN KEY
(колоната country_id
в таблицата student
), DEFAULT
(името на колоната в таблицата 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(country_id) REFERENCES country(id) );
Нека покажем как MySQL наименува ограниченията на тези таблици по подразбиране. Използвайте тази заявка, за да ги видите:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Ето резултата:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
държава | ПЪРВИЧЕН КЛЮЧ | ОСНОВНО |
държава | УНИКАЛНО | име |
ученик | ПЪРВИЧЕН КЛЮЧ | ОСНОВНО |
ученик | УНИКАЛНО | личен_номер |
ученик | ВЪНШЕН КЛЮЧ | student_ibfk_1 |
ученик | ПРОВЕРКА | student_chk_1 |
Дискусия:
Когато създаваме нашите таблици, ние задаваме ограничения за някои колони. Въпреки това, ние не уточняваме имената за тези ограничения, така че те са именувани по подразбиране в MySQL. В MySQL типовете ограничения по подразбиране са PRIMARY KEY constraint
, FOREIGN KEY
, UNIQUE
и CHECK
. Как се генерират имената по подразбиране за ограничения?
Ограничението PRIMARY KEY constraint
се нарича просто PRIMARY
, защото винаги има един първичен ключ в таблица. Има две ограничения, наречени PRIMARY
в резултата по-горе, но таблиците, към които принадлежат, са различни.
За FOREIGN KEY
, името следва конвенцията:името на таблицата, долна черта (‘_
“), „ibfk
“, друго долно подчертаване („_
“) и число. За нашия пример това е student_ibfk_1
в таблицата student
.
Името по подразбиране за CHECK
ограничението е подобно на това на външния ключ. Започва с името на таблицата, долна черта (‘_
’), „chk
“, друго долно подчертаване („
_
“) и число. За нашия пример това е student_chk_1
в таблицата student
.
Името по подразбиране на UNIQUE
constraint е името на самата колона. За нашия пример това е personal_number
в таблицата student
. Когато има няколко колони с UNIQUE
ограничение, той използва името на първата колона в дефиницията на ограничението.