Так есть ли способ вставить пустое значение в поле ограничения?
Да, есть. Пока столбец, управляемый внешним ключом, не определен как NOT NULL
, в него можно вставить значение NULL
, как объясняется в руководстве . Недопустимо вставлять не-NULL
значение, которое не существует в родительской таблице (включая пустую строку!).
MySQL по существу реализует семантику, определенную MATCH SIMPLE
, которые позволяют внешнему ключу быть полностью или частично NULL
. В этом случае разрешается вставка строки (дочерней таблицы), содержащей такой внешний ключ, и не соответствует ни одной строке в ссылочной (родительской) таблице.
Рассмотрим эту демонстрацию в DB Fiddlde :
-- parent table
create table parent (id int primary key);
-- child table
create table child (
id int primary key,
parent_id int null, -- allow `NULL` values
constraint parent_id_fk foreign key(parent_id) references parent(id)
);
-- create a parent record
insert into parent(id) values(1);
-- insert a child record that references the parent: ok
insert into child(id, parent_id) values(1, 1);
-- insert a child record with a NULL parent_id : ok
insert into child(id, parent_id) values(2, NULL);
-- insert a child record with a (non-NULL) unknown parent_id
insert into child(id, parent_id) values(3, 2);
-- Error: Cannot add or update a child row: a foreign key constraint fails