PHPMyAdmin Ошибка внешнего ключа - не удалось добавить ограничение - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь спроектировать структуру базы данных для моего домашнего бюджетного приложения на PHP. При настройке внешних ключей я столкнулся с проблемой.

У меня есть 3 таблицы:

log (id, дата, tranTypeID, categoryID, описание, значение, isForecast)
категрия (id, categoryName)
тип транзакции (идентификатор, имя-транзакции)

журнал - основная запись бюджета
категория - список фиксированных категорий для записей журнала
тип транзакции - на данный момент хранится всего 2 записи: расходы, доходы

Я установил внешний ключ для tranTypeID без сбоя. При попытке сделать то же самое для categoryID по:

ALTER TABLE `log` ADD  CONSTRAINT `fk_log_category` FOREIGN KEY (`categoryID`) REFERENCES `category`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

Я получаю следующую ошибку:

1452 - Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (budget. #sql-1aac_349, CONSTRAINT fk_log_category FOREIGN KEY (categoryID) ССЫЛКИ category (id))

Я настроил все движки таблиц на InnoDB, и для всех связанных столбцов был установлен точно такой же тип данных.

1 Ответ

0 голосов
/ 09 января 2019

Скорее всего, в вашей таблице log есть записи, которых categoryID не существует в таблице cateogry. Вам необходимо обновить или удалить эти записи перед созданием внешнего ключа.

Вы можете использовать приведенный ниже запрос, чтобы найти оскорбительные записи:

SELECT DISTINCT categoryID 
FROM log l LEFT JOIN category c ON c.id = l.categoryID
WHERE c.id IS NULL;
...