SQL ограничение значений
DOBROGO денечка, случайный прохожий! Имею 2 таблицы: skill (id, name) и developer (id, name, skills). Возможно ли поставить ограничение, что бы в таблицу developer в столбец skills, можно было добавить только то значение, которое существует в таблице skill? И если это возможно, то подскажите пожалуйста как написать такой запрос! Спасибо!
Пишу небольшое CRUD приложение, поэтому если это будет выборка, было еще лучше!
Ответы (1 шт):
Именно для этой цели и существуют внешние ключи (FOREIGN KEY) - сервер проверяет наличие значения в другой таблице и блокирует изменения, если такого значения нет. Чтобы эта связь была более очевидной, крайне желательно, чтобы оба поля (и то, которое ссылается, и то, на которое ссылается) имели в точности одно и то же имя.
В Вашем случае это может быть, например, так:
CREATE TABLE skill ( skill_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) );
и
CREATE TABLE developer ( developer_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
skill_id INT,
CONSTRAINT skill_id FOREIGN KEY (skill_id) REFERENCES skill (skill_id) );
Теперь в таблицу developer в поле skill_id можно вставить только значение, которое уже имеется в таблице skill в поле skill_id. Либо можно вставить значение NULL.
Если же поле обязательно для заполнения, то его следует дополнительно объявить как NOT NULL, и тогда вставляемое значение должно быть строго имеющимся в таблице skill.
Обратите внимание. Тип данных обеих полей строго совпадает (INT). Если, например, в одной таблице оно объявлено как беззнаковое, то и в другой оно должно быть таким же - иначе связь не создастся.
Кроме того, оба поля должны быть индексированы. В таблице developer такой индекс будет создан автоматически при создании ограничения (constraint), если он не существует, а вот в таблице, на которую ссылаемся, он обязан быть создан заранее