при удалении установить ноль при обновлении каскада MySQL - PullRequest
0 голосов
/ 16 ноября 2018

У меня следующая проблема:

Это мой код в MySQL:

create table fremd(

id int primary key,
name varchar(20),
foreign key(id) references mensch(id) on delete set null

);

id является первичным ключом этой таблицы, но также и внешним ключом, который ссылается на первичный ключ таблицы mensch. Проблема в том, что при удалении установлен нулевой оператор. Когда я использую каскад вместо set null, это работает. Но с установленным нулем это не работает. Что я могу сделать?

Это сообщение об ошибке:

08: 39: 00 Код ошибки: 1215. Невозможно добавить ограничение внешнего ключа 2.609 сек

1 Ответ

0 голосов
/ 16 ноября 2018

В вашем 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 (это заблокирует удаление из родительской таблицы).
...