Не удается определить внешний ключ
В MySQL у меня есть две таблицы:
Мониторы:
Id: INT PRIMARY KEY NOT NULL AUTOINCREMENT
Группы: ИНТ нуль
....
MonitorGroups:
Id: INT PRIMARY KEY NOT NULL AUTOINCREMENT
Имя: ВАРЧАР(50)
Мне нужно определить это ограничение:
Изменение таблицы мониторы monitor_group_fk добавить ограничение внешнего ключа (группы) ссылки MonitorGroups (ИД);
Но я получаю следующую ошибку:
Ошибка 1452 (23000): не удается добавить или обновить дочернюю строку: не удается выполнить ограничение внешнего ключа (`zm`.`#SQL и 475_1c237` ограничение `monitor_group_fk` внешний ключ (при необходимости) ссылки `MonitorGroups` (`идентификатор`))
В настоящий момент нет ни одной записи в таблице MonitorGroups и группы строк таблицы мониторы не установлены. Мне нужно, чтобы это было законно. Другими словами, Мне нужно, чтобы MySQL отслеживал поле GroupId монитора таблиц только в том случае, если оно установлено. Я хотел бы определить это ограничение следующим образом:
ALTER TABLE Monitors ADD CONSTRAINT monitor_group_fk FOREIGN KEY (GroupId) REFERENCES MonitorGroups (Id) ON UPDATE CASCADE ON DELETE SET NULL;
таким образом, если идентификатор группы (поле Id) изменился в таблице MonitorGroups, MySQL автоматически изменяет его в мониторах таблиц, а если группа была удалена из таблицы MonitorGroups, MySQL автоматически устанавливает GroupId соответствующих строк в мониторах таблиц в null. Что не так и как достичь этой цели?
Что я уже пробовал:
Я исследовал обнуляемые внешние ключи, но в конце концов не смог найти решение. Я не уверен, поддерживает ли MySQL обнуляемые внешние ключи.
0x01AA
"Я не уверен, есть ли поддержка MySQL значение null внешний ключ": MySQL не поддерживает внешние ключи, допускающие значения null.
Проверьте еще раз мониторы вашей таблицы и убедитесь, что GroupId NULL
для каждой записи.
Если это не помогает, начните снова с нуля в новой БД, чтобы проверить процесс создания таблицы.
ilostmyid2
не помочь. для создания внешнего ключа неизбежно наличие строки в таблице MonitorGroups с идентификатором 0.
0x01AA
Id == '0'
это не то же самое, как Id == NULL
NULL: означает не определено
0: означает допустимое целое число