В вашем CREATE TABLE
есть два противоречивых объявления:
id int primary key
Это означает, что id
- это первичный ключ.Теперь первичный ключ в основном удовлетворяет следующим двум ограничениям:
- Это будет уникальный.Таким образом, никакие две строки не могут иметь одинаковое значение для
id
. - Это будет
NOT NULL
.Таким образом, он никогда не может быть установлен как NULL
.
С другой стороны, ваше определение внешнего ключа гласит:
foreign key(id) references mensch(id) on delete set null
ON DELETE SET NULL
в основном означает, что когда родительЗначение таблицы id
удалено, значение дочерней таблицы (этой таблицы) id
установлено на NULL
.Это напрямую противоречит объявлению первичного ключа, которое не позволяет ему стать NULL
.
. Поэтому ваш внешний ключ не может быть определен.Теперь вы можете использовать любой из следующих вариантов, чтобы решить эту проблему.Но эти параметры должны быть тщательно определены на основе вашей бизнес-логики:
- Создать
id
UNIQUE
ключ вместо Primary Key
.Это гарантирует, что оно останется уникальным значением, а также в нем можно будет использовать NULL
. - Измените
ON DELETE
behvaiour внешнего ключа на что-то другое, например, CASCADE
(это удалит дочерний элементстрока таблицы, когда удаляется строка родительской таблицы), или RESTRICT
(это заблокирует удаление из родительской таблицы).