Я хочу создать внешний ключ для таблицы, используя 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