Внешний ключ MySQL ON DELETE SET NULL - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу создать внешний ключ для таблицы, используя ON DELETE SET NULL, но команда ALTER отклонена.

CREATE TABLE `Locations`  (
  `id` int(0) NOT NULL,
  `name` varchar(255) NOT NULL,
  `image_id` int(0) UNSIGNED NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `Pictures`  (
  `id` int(0) NOT NULL,
  `url` varchar(255) NULL,
  PRIMARY KEY (`id`)
);

ALTER TABLE `Locations` 
  ADD CONSTRAINT `fk1` FOREIGN KEY (`image_id`) REFERENCES `Pictures` (`id`) ON DELETE SET NULL;

До сих пор я узнал, что в MySQL уже есть BugReport, но он был закрыт как "ожидаемое поведение": https://bugs.mysql.com/bug.php?id=80052 , на который ссылаются здесь: https://stackoverflow.com/a/35042002/2889265

Теперь у меня вопрос, как я могу реализовать поле в Locations , которое может быть заполнено ссылкой на строку в Pictures с использованием первичного ключа. Но это не обязательно, чтобы быть заполненным. Поле может остаться пустым или будет обновлено, чтобы быть пустым позже. (Местоположение не нужно изображать)

Если эта строка в Изображения удалена, столбец в Местоположения должен быть сброшен вNULL автоматически (как и следовало ожидать, функция ON DELETE SET NULL)? Должен ли я создать триггер или что-то в этом роде для достижения ожидаемого поведения.


Среды:
Dev: MariaDB 10.3.15
Prod: MySQL 8.0.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...