SQLite: действие внешнего ключа «ON DELETE SET NULL» не запускается - PullRequest
1 голос
/ 12 ноября 2019

Почему ON DELETE SET NULL терпит неудачу при удалении строки с помощью кода приложения, но работает правильно при ручном выполнении оператора SQL?

У меня есть таблица задач и таблица категорий,Таблица задач имеет внешний ключ category_id, который ссылается на id в таблице категорий, и она была создана с помощью действия «ON DELETE SET NULL».

create table `category` (
  `id` integer not null primary key autoincrement,
  `name` varchar(255) not null
);
create table `todo` (
  `id` integer not null primary key autoincrement,
  `title` varchar(255) not null,
  `complete` boolean not null default '0',
  `category_id` integer,
  foreign key(`category_id`) references `category`(`id`) on delete SET NULL on update CASCADE
);

У меня также естьконечная точка в моем приложении, которая позволяет пользователям удалять категории.

categoryRouter.delete('/:id', async (req, res) => {
  const { id } = req.params
  await req.context.models.Category.delete(id)
  return res.status(204).json()
})

Этот маршрут успешно удаляет категории, но проблема в том, что связанные элементы todo не получают свойству category_id значение null, поэтому они заканчиваютсяс идентификатором категории, которая больше не существует. Как ни странно, если я открою графический интерфейс своей базы данных и вручную выполню запрос для удаления категории ... DELETE FROM category WHERE id=1 ... ловушка "ON DELETE SET NULL" будет успешно запущена. Любой элемент todo с category_id=1 теперь имеет значение null.

Полный источник приложения можно найти здесь .

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